[
  {
    "path": ".clang-format",
    "content": "AccessModifierOffset: -1\nAlignAfterOpenBracket: AlwaysBreak\nAlignConsecutiveMacros: false\nAlignConsecutiveAssignments: false\nAlignConsecutiveBitFields: false\nAlignConsecutiveDeclarations: false\nAlignEscapedNewlines: Left\nAlignOperands: DontAlign\nAlignTrailingComments: false\nAllowAllArgumentsOnNextLine: true\nAllowAllConstructorInitializersOnNextLine: true\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortEnumsOnASingleLine: true\nAllowShortBlocksOnASingleLine: Never\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortFunctionsOnASingleLine: Empty\nAllowShortLambdasOnASingleLine: All\nAllowShortIfStatementsOnASingleLine: Never\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: Yes\nBinPackArguments: false\nBinPackParameters: false\nBreakBeforeBinaryOperators: None\nBreakBeforeBraces: Attach\nBreakInheritanceList: BeforeColon\nBreakBeforeTernaryOperators: true\nBreakConstructorInitializers: BeforeColon\nBreakAfterJavaFieldAnnotations: false\nBreakStringLiterals: false\nColumnLimit: 80\nCommentPragmas: '^ IWYU pragma:'\nCompactNamespaces: false\nConstructorInitializerAllOnOneLineOrOnePerLine: true\nConstructorInitializerIndentWidth: 4\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDeriveLineEnding: true\nDerivePointerAlignment: false\nDisableFormat: false\nFixNamespaceComments: true\nForEachMacros:\n  - FOR_EACH\n  - FOR_EACH_R\n  - FOR_EACH_RANGE\nIncludeBlocks: Preserve\nIncludeCategories:\n  - Regex:           '^<.*\\.h(pp)?>'\n    Priority:        1\n  - Regex:           '^<.*'\n    Priority:        2\n  - Regex:           '.*'\n    Priority:        3\nIndentCaseLabels: true\nIndentCaseBlocks: false\nIndentGotoLabels: true\nIndentPPDirectives: None\nIndentExternBlock: AfterExternBlock\nIndentWidth: 2\nIndentWrappedFunctionNames: false\nInsertTrailingCommas: None\nJavaScriptQuotes: Leave\nJavaScriptWrapImports: true\nKeepEmptyLinesAtTheStartOfBlocks: false\nMacroBlockBegin: ''\nMacroBlockEnd: ''\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\nObjCBinPackProtocolList: Auto\nObjCBlockIndentWidth: 2\nObjCBreakBeforeNestedBlockParam: true\nObjCSpaceAfterProperty: false\nObjCSpaceBeforeProtocolList: false\nPenaltyBreakAssignment: 2\nPenaltyBreakBeforeFirstCallParameter: 1\nPenaltyBreakComment: 300\nPenaltyBreakFirstLessLess: 120\nPenaltyBreakString: 1000\nPenaltyBreakTemplateDeclaration: 10\nPenaltyExcessCharacter: 1000000\nPenaltyReturnTypeOnItsOwnLine: 200\nPointerAlignment: Left\nReflowComments: true\nSortIncludes: true\nSortUsingDeclarations: true\nSpaceAfterCStyleCast: false\nSpaceAfterLogicalNot: false\nSpaceAfterTemplateKeyword: true\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeCpp11BracedList: false\nSpaceBeforeCtorInitializerColon: true\nSpaceBeforeInheritanceColon: true\nSpaceBeforeParens: ControlStatements\nSpaceBeforeRangeBasedForLoopColon: true\nSpaceInEmptyBlock: false\nSpaceInEmptyParentheses: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles: false\nSpacesInConditionalStatement: false\nSpacesInContainerLiterals: true\nSpacesInCStyleCastParentheses: false\nSpacesInParentheses: false\nSpacesInSquareBrackets: false\nSpaceBeforeSquareBrackets: false\nStandard: Latest\nTabWidth: 8\nUseCRLF: false\nUseTab: Never\n"
  },
  {
    "path": ".clang-tidy",
    "content": "---\nInheritParentConfig: true\nChecks: '>\nbugprone-argument-comment,\nbugprone-assert-side-effect,\nbugprone-bool-pointer-implicit-conversion,\nbugprone-copy-constructor-init,\nbugprone-dangling-handle,\nbugprone-exception-escape,\nbugprone-fold-init-type,\nbugprone-forward-declaration-namespace,\nbugprone-forwarding-reference-overload,\nbugprone-incorrect-enable-if,\nbugprone-inaccurate-erase,\nbugprone-incorrect-roundings,\nbugprone-infinite-loop,\nbugprone-integer-division,\nbugprone-macro-parentheses,\nbugprone-macro-repeated-side-effects,\nbugprone-misplaced-operator-in-strlen-in-alloc,\nbugprone-misplaced-widening-cast,\nbugprone-move-forwarding-reference,\nbugprone-multiple-statement-macro,\nbugprone-optional-value-conversion,\nbugprone-parent-virtual-call,\nbugprone-redundant-branch-condition,\nbugprone-shared-ptr-array-mismatch,\nbugprone-signed-char-misuse,\nbugprone-sizeof-container,\nbugprone-sizeof-expression,\nbugprone-string-constructor,\nbugprone-string-integer-assignment,\nbugprone-string-literal-with-embedded-nul,\nbugprone-suspicious-enum-usage,\nbugprone-suspicious-memset-usage,\nbugprone-suspicious-missing-comma,\nbugprone-suspicious-semicolon,\nbugprone-suspicious-string-compare,\nbugprone-swapped-arguments,\nbugprone-terminating-continue,\nbugprone-throw-keyword-missing,\nbugprone-too-small-loop-variable,\nbugprone-undefined-memory-manipulation,\nbugprone-undelegated-constructor,\nbugprone-unique-ptr-array-mismatch,\nbugprone-unsafe-functions,\nbugprone-unused-raii,\nbugprone-unused-return-value,\nbugprone-use-after-move,\nbugprone-virtual-near-miss,\nclang-analyzer-apiModeling.google.GTest,\nclang-analyzer-apiModeling.StdCLibraryFunctions,\nclang-analyzer-apiModeling.TrustNonnull,\nclang-analyzer-core.builtin.BuiltinFunctions,\nclang-analyzer-core.builtin.NoReturnFunctions,\nclang-analyzer-core.CallAndMessage,\nclang-analyzer-core.DivideZero,\nclang-analyzer-core.DynamicTypePropagation,\nclang-analyzer-core.NonnilStringConstants,\nclang-analyzer-core.NonNullParamChecker,\nclang-analyzer-core.NullDereference,\nclang-analyzer-core.StackAddressEscape,\nclang-analyzer-core.UndefinedBinaryOperatorResult,\nclang-analyzer-core.uninitialized.ArraySubscript,\nclang-analyzer-core.uninitialized.Assign,\nclang-analyzer-core.uninitialized.Branch,\nclang-analyzer-core.uninitialized.CapturedBlockVariable,\nclang-analyzer-core.uninitialized.UndefReturn,\nclang-analyzer-core.VLASize,\nclang-analyzer-cplusplus.InnerPointer,\nclang-analyzer-cplusplus.Move,\nclang-analyzer-cplusplus.NewDelete,\nclang-analyzer-cplusplus.NewDeleteLeaks,\nclang-analyzer-cplusplus.SelfAssignment,\nclang-analyzer-deadcode.DeadStores,\nclang-analyzer-nullability.NullableDereferenced,\nclang-analyzer-nullability.NullablePassedToNonnull,\nclang-analyzer-nullability.NullableReturnedFromNonnull,\nclang-analyzer-nullability.NullPassedToNonnull,\nclang-analyzer-nullability.NullReturnedFromNonnull,\nclang-analyzer-optin.cplusplus.VirtualCall,\nclang-analyzer-optin.mpi.MPI-Checker,\nclang-analyzer-optin.performance.GCDAntipattern,\nclang-analyzer-optin.performance.Padding,\nclang-analyzer-optin.portability.UnixAPI,\nclang-analyzer-security.FloatLoopCounter,\nclang-analyzer-security.insecureAPI.bcmp,\nclang-analyzer-security.insecureAPI.bcopy,\nclang-analyzer-security.insecureAPI.bzero,\nclang-analyzer-security.insecureAPI.getpw,\nclang-analyzer-security.insecureAPI.gets,\nclang-analyzer-security.insecureAPI.mkstemp,\nclang-analyzer-security.insecureAPI.mktemp,\nclang-analyzer-security.insecureAPI.rand,\nclang-analyzer-security.insecureAPI.strcpy,\nclang-analyzer-security.insecureAPI.UncheckedReturn,\nclang-analyzer-security.insecureAPI.vfork,\nclang-analyzer-unix.API,\nclang-analyzer-unix.cstring.BadSizeArg,\nclang-analyzer-unix.cstring.NullArg,\nclang-analyzer-unix.Malloc,\nclang-analyzer-unix.MallocSizeof,\nclang-analyzer-unix.MismatchedDeallocator,\nclang-analyzer-unix.Vfork,\nclang-analyzer-valist.CopyToSelf,\nclang-analyzer-valist.Uninitialized,\nclang-analyzer-valist.Unterminated,\nclang-diagnostic-*,\ncppcoreguidelines-avoid-const-or-ref-data-members,\ncppcoreguidelines-avoid-non-const-global-variables,\ncppcoreguidelines-init-variables,\ncppcoreguidelines-interfaces-global-init,\ncppcoreguidelines-macro-usage,\ncppcoreguidelines-missing-std-forward,\ncppcoreguidelines-narrowing-conversions,\ncppcoreguidelines-no-malloc,\ncppcoreguidelines-prefer-member-initializer,\ncppcoreguidelines-pro-bounds-pointer-arithmetic,\ncppcoreguidelines-pro-type-const-cast,\ncppcoreguidelines-pro-type-cstyle-cast,\ncppcoreguidelines-pro-type-member-init,\ncppcoreguidelines-pro-type-reinterpret-cast,\ncppcoreguidelines-pro-type-union-access,\ncppcoreguidelines-pro-type-vararg,\ncppcoreguidelines-slicing,\ncppcoreguidelines-special-member-functions,\nfacebook-hte-BadEnum,\nfacebook-hte-MissingStatic,\ngoogle-build-using-namespace,\nmisc-definitions-in-headers,\nmisc-header-include-cycle,\nmisc-misplaced-const,\nmisc-new-delete-overloads,\nmisc-non-copyable-objects,\nmisc-static-assert,\nmisc-throw-by-value-catch-by-reference,\nmisc-unconventional-assign-operator,\nmisc-uniqueptr-reset-release,\nmisc-unused-alias-decls,\nmisc-unused-parameters,\nmisc-unused-using-decls,\nmodernize-avoid-bind,\nmodernize-avoid-c-arrays,\nmodernize-concat-nested-namespaces,\nmodernize-deprecated-headers,\nmodernize-deprecated-ios-base-aliases,\nmodernize-loop-convert,\nmodernize-make-shared,\nmodernize-make-unique,\nmodernize-pass-by-value,\nmodernize-raw-string-literal,\nmodernize-redundant-void-arg,\nmodernize-replace-auto-ptr,\nmodernize-replace-random-shuffle,\nmodernize-return-braced-init-list,\nmodernize-shrink-to-fit,\nmodernize-unary-static-assert,\nmodernize-use-auto,\nmodernize-use-bool-literals,\nmodernize-use-constraints,\nmodernize-use-default-member-init,\nmodernize-use-designated-initializers,\nmodernize-use-emplace,\nmodernize-use-equals-default,\nmodernize-use-equals-delete,\nmodernize-use-noexcept,\nmodernize-use-nullptr,\nmodernize-use-override,\nmodernize-use-starts-ends-with,\nmodernize-use-transparent-functors,\nmodernize-use-using,\nperformance-faster-string-find,\nperformance-for-range-copy,\nperformance-implicit-conversion-in-loop,\nperformance-inefficient-algorithm,\nperformance-inefficient-string-concatenation,\nperformance-inefficient-vector-operation,\nperformance-move-const-arg,\nperformance-move-constructor-init,\nperformance-noexcept-move-constructor,\nperformance-type-promotion-in-math-fn,\nperformance-unnecessary-copy-initialization,\nperformance-unnecessary-value-param,\nreadability-avoid-const-params-in-decls,\nreadability-braces-around-statements,\nreadability-const-return-type,\nreadability-container-size-empty,\nreadability-delete-null-pointer,\nreadability-deleted-default,\nreadability-implicit-bool-conversion,\nreadability-inconsistent-declaration-parameter-name,\nreadability-isolate-declaration,\nreadability-misplaced-array-index,\nreadability-named-parameter,\nreadability-non-const-parameter,\nreadability-redundant-control-flow,\nreadability-redundant-declaration,\nreadability-redundant-function-ptr-dereference,\nreadability-redundant-preprocessor,\nreadability-redundant-smartptr-get,\nreadability-redundant-string-cstr,\nreadability-redundant-string-init,\nreadability-simplify-boolean-expr,\nreadability-simplify-subscript-expr,\nreadability-static-accessed-through-instance,\nreadability-static-definition-in-anonymous-namespace,\nreadability-string-compare,\nreadability-uniqueptr-delete-release,\n'\n\nCheckOptions:\n- key: performance-unnecessary-value-param.AllowedTypes\n  value: '[Pp]ointer$;[Pp]tr$;[Rr]ef(erence)?$;'\n- key: performance-unnecessary-copy-initialization.AllowedTypes\n  value: '[Pp]ointer$;[Pp]tr$;[Rr]ef(erence)?$'\n\n...\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintrc.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nmodule.exports = {\n  root: true,\n  ignorePatterns: ['**/binaries/**', '**/build/**', '**/generated/**'],\n  overrides: [\n    // Catch-all\n    {\n      files: ['**/*.?(m|c){j,t}s?(x)'],\n      extends: ['eslint:recommended', 'plugin:prettier/recommended'],\n      plugins: ['prettier'],\n      rules: {\n        'no-unused-vars': ['error', {argsIgnorePattern: '^_'}],\n        'no-var': 'error',\n        'prefer-arrow-callback': 'error',\n        'prefer-const': 'error',\n        'prefer-object-spread': 'error',\n        'prefer-spread': 'error',\n        'require-await': 'error',\n      },\n      env: {\n        es2020: true,\n        'shared-node-browser': true,\n      },\n      parserOptions: {\n        ecmaVersion: 'latest',\n      },\n    },\n    // ES Modules\n    {\n      files: ['**/*.?(m){j,t}s?(x)'],\n      parserOptions: {\n        sourceType: 'module',\n      },\n    },\n    // CommonJS Modules\n    {\n      files: ['**/*.c{j,t}s?(x)'],\n      env: {\n        commonjs: true,\n      },\n      parserOptions: {\n        sourceType: 'commonjs',\n      },\n    },\n    // TypeScript\n    {\n      files: ['**/*.?(m|c)ts?(x)'],\n      extends: ['plugin:@typescript-eslint/recommended'],\n      parser: '@typescript-eslint/parser',\n      parserOptions: {\n        project: true,\n      },\n      plugins: ['@typescript-eslint'],\n      rules: {\n        '@typescript-eslint/ban-ts-comment': 'off',\n        '@typescript-eslint/no-unused-vars': [\n          'error',\n          {argsIgnorePattern: '^_'},\n        ],\n        '@typescript-eslint/no-var-requires': 'off',\n      },\n    },\n    // Node\n    {\n      files: ['**/.*rc.(c){j,t}s', '**/*.config.?(c){j,t}s'],\n      env: {\n        node: true,\n      },\n    },\n    // Jest\n    {\n      files: ['**/tests/**'],\n      extends: ['plugin:jest/recommended'],\n    },\n  ],\n};\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "# Report\n\n- [ ] I have searched [existing issues](https://github.com/facebook/yoga/issues) and this is not a duplicate\n\n# Issues and Steps to Reproduce\n***Replaces this with steps to repro your issue.***\n\n# Expected Behavior\n***Describe what you expected would happen.***\n\n# Actual Behavior\n***Describe what actually happened.***\n\n# Link to Code\n***If you have some code that maintainers can clone/test for themselves, bugs can be resolved much faster. Please paste a link here.***\n\n***When applicable, use this [fiddle](https://jsfiddle.net/emilsjolander/jckmwztt/) to post a web repro.***\n"
  },
  {
    "path": ".github/actions/black/action.yml",
    "content": "name: Black Formatter\ninputs:\n  directory:\n    description: Directory to Lint\n    required: true\n  version:\n    description: pypi version of \"black\" to use\n    required: false\n    default: 22.3.0\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Ensure supported Python selected\n      uses: actions/setup-python@v4\n      with:\n        python-version: '>=3.6.2'\n\n    - name: pip install\n      shell: bash\n      run: pip install black==${{ inputs.version }}\n\n    - name: black\n      shell: bash\n      run: black --check ${{ inputs.directory }}\n"
  },
  {
    "path": ".github/actions/cache-emsdk/action.yml",
    "content": "name: Cache the installed copy of emsdk and its build artifacts\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Cache emsdk\n      uses: actions/cache@v3\n      with:\n        path: javascript/.emsdk\n        key: emsdk-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock', 'javascript/package.json', 'javascript/just.config.cjs')}}\n"
  },
  {
    "path": ".github/actions/install-ninja/action.yml",
    "content": "name: Install Ninja\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Install ninja (Linux)\n      if: ${{ runner.os == 'Linux' }}\n      shell: bash\n      run: sudo apt-get install -y ninja-build\n\n    - name: Install ninja (Windows)\n      if: ${{ runner.os == 'Windows' }}\n      shell: powershell\n      run: choco install ninja\n"
  },
  {
    "path": ".github/actions/setup-android/action.yml",
    "content": "name: Setup Android environment\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Select Java Version\n      uses: actions/setup-java@v2\n      with:\n        distribution: zulu\n        java-version: 17\n    - name: Configure Gradle Caches\n      uses: gradle/gradle-build-action@v2\n"
  },
  {
    "path": ".github/actions/setup-apple/action.yml",
    "content": "name: Setup Apple envirionment\n\nruns:\n  using: \"composite\"\n  steps:\n    - uses: maxim-lobanov/setup-xcode@v1\n      with:\n        xcode-version: 26.2\n"
  },
  {
    "path": ".github/actions/setup-cpp/action.yml",
    "content": "name: Setup C++ envirionment\ninputs:\n  toolchain:\n    description: Compiler toolchain to use (Clang, GCC, or MSVC)\n    required: false\n    default: 'Clang'\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Install Ninja\n      if: ${{ runner.os != 'Windows' }}\n      uses: ./.github/actions/install-ninja\n\n    - name: Set Clang as compiler\n      if: ${{ inputs.toolchain == 'Clang' }}\n      shell: bash\n      run: |\n        sudo apt-get install -y libc++-dev libc++abi-dev\n        echo \"CC=/usr/bin/clang\" >> $GITHUB_ENV\n        echo \"CXX=/usr/bin/clang++\" >> $GITHUB_ENV\n        echo \"CXXFLAGS=-stdlib=libc++\" >> $GITHUB_ENV\n        echo \"LDFLAGS=-stdlib=libc++\" >> $GITHUB_ENV\n\n    - name: Set GCC as compiler\n      if: ${{ inputs.toolchain == 'GCC' }}\n      shell: bash\n      run: |\n        echo \"CC=/usr/bin/gcc\" >> $GITHUB_ENV\n        echo \"CXX=/usr/bin/g++\" >> $GITHUB_ENV\n\n    - name: Setup VS Developer Command Prompt\n      if: ${{ runner.os == 'Windows' }}\n      uses: ilammy/msvc-dev-cmd@v1\n"
  },
  {
    "path": ".github/actions/setup-js/action.yml",
    "content": "name: Setup JavaScript envirionment\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Setup Node environment\n      uses: actions/setup-node@v3\n      with:\n        node-version: 20.x\n        cache: yarn\n        cache-dependency-path: yarn.lock\n      env:\n        # https://github.com/actions/setup-node/issues/317\n        FORCE_COLOR: 0\n\n    - name: yarn install\n      shell: bash\n      run: yarn install --frozen-lockfile\n"
  },
  {
    "path": ".github/workflows/publish-android-release.yml",
    "content": "name: Publish Android Release\n\non:\n  push:\n    tags:\n      - '*'\n  workflow_dispatch:\n\njobs:\n  publish:\n    name: Publish to Maven Central\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-android\n\n      - name: Publish to Maven Local\n        run: ./gradlew publishToMavenLocal\n        env:\n          ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}\n          ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}\n\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: 'snapshot-artifacts'\n          path: '~/.m2/repository/'\n\n      - name: Publish to the Maven Central\n        run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository\n        env:\n          ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }}\n          ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}\n          ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}\n          ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}\n"
  },
  {
    "path": ".github/workflows/publish-android-snashot.yml",
    "content": "name: Publish Android Snapshot\n\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n  publish:\n    name: Publish Snapshot\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-android\n\n      - name: Publish to Maven Local\n        run: ./gradlew publishToMavenLocal\n        env:\n          ORG_GRADLE_PROJECT_USE_SNAPSHOT: true\n\n      - name: Upload Build Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: 'snapshot-artifacts'\n          path: '~/.m2/repository/'\n\n      - name: Publish to the Snapshot Repository\n        run: ./gradlew publishToSonatype\n        env:\n          ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }}\n          ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}\n          ORG_GRADLE_PROJECT_USE_SNAPSHOT: true\n"
  },
  {
    "path": ".github/workflows/publish-npm-release.yml",
    "content": "name: Publish NPM Release\n\non:\n  push:\n    tags:\n      - '*'\n  workflow_dispatch:\n\njobs:\n  publish:\n    name: Publish to npmjs registry\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Store auth token in config file\n        run: echo \"//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}\" > ~/.npmrc\n\n      - name: yarn publish\n        run: yarn publish\n        working-directory: javascript\n"
  },
  {
    "path": ".github/workflows/validate-android.yml",
    "content": "name: Validate Android\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - 'release-*'\n  workflow_dispatch:\n\njobs:\n  build:\n    name: Build [${{ matrix.os }}][${{ matrix.mode }}]\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        mode: [Debug, Release]\n        os: [ubuntu-latest, windows-latest]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-android\n\n      - name: Build\n        run: ./gradlew assemble${{ matrix.mode }} --stacktrace\n"
  },
  {
    "path": ".github/workflows/validate-cpp.yml",
    "content": "name: Validate C++\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - 'release-*'\n  workflow_dispatch:\n\nenv:\n  GTEST_COLOR: 1\n\njobs:\n  test:\n    name: Build and Test [${{ matrix.toolchain }}][${{ matrix.mode }}]\n    runs-on: ${{ (matrix.toolchain == 'MSVC') && 'windows-latest' || 'ubuntu-latest'  }}\n    strategy:\n      matrix:\n        mode: [Debug, Release]\n        toolchain: [Clang, GCC] # TODO: fix issues building GTest Binary with MSVC in GitHub Actions\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-cpp\n        with:\n          toolchain: ${{ matrix.toolchain }}\n\n      - name: Unit tests\n        run: ./unit_tests ${{ matrix.mode }}\n\n\n  build_fuzzers:\n    name: Build fuzzers [${{ matrix.toolchain }}][${{ matrix.mode }}]\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        mode: [Debug, Release]\n        toolchain: [Clang]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-cpp\n        with:\n          toolchain: ${{ matrix.toolchain }}\n\n      - name: Unit tests\n        run: ./build_fuzz_tests ${{ matrix.mode }}\n\n  benchmark:\n    name: Benchmark [${{ matrix.toolchain }}]\n    runs-on: ${{ (matrix.toolchain == 'MSVC') && 'windows-latest' || 'ubuntu-latest'  }}\n    strategy:\n      matrix:\n        toolchain: [Clang, GCC, MSVC]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-cpp\n        with:\n          toolchain: ${{ matrix.toolchain }}\n\n      - name: Build and run benchmark\n        run: |\n          cmake -S . -B build -G Ninja -D CMAKE_BUILD_TYPE=Release\n          cmake --build build\n          ./build/benchmark ./captures\n        working-directory: benchmark\n\n      - name: Build and run benchmarklegacy\n        run: ./build/benchmarklegacy\n        working-directory: benchmark\n\n  capture:\n    name: Capture [${{ matrix.toolchain }}]\n    runs-on: ${{ (matrix.toolchain == 'MSVC') && 'windows-latest' || 'ubuntu-latest'  }}\n    strategy:\n      matrix:\n        toolchain: [Clang, GCC, MSVC]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-cpp\n        with:\n          toolchain: ${{ matrix.toolchain }}\n\n      - name: Build capture\n        run: |\n          cmake -S . -B build -G Ninja -D CMAKE_BUILD_TYPE=Release\n          cmake --build build\n        working-directory: capture\n"
  },
  {
    "path": ".github/workflows/validate-js.yml",
    "content": "name: Validate JavaScript\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - 'release-*'\n  workflow_dispatch:\n\nenv:\n  FORCE_COLOR: 3\n\njobs:\n  benchmark:\n    name: Benchmark [${{ matrix.os }}]\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Restore emsdk\n        uses: ./.github/actions/cache-emsdk\n\n      - name: yarn benchmark\n        run: yarn benchmark\n        working-directory: javascript\n\n  build:\n    name: Build [${{ matrix.os }}]\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Restore emsdk\n        uses: ./.github/actions/cache-emsdk\n\n      - name: yarn build\n        run: yarn build --verbose\n        working-directory: javascript\n\n  test:\n    name: Test [${{ matrix.os }}]\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Restore emsdk\n        uses: ./.github/actions/cache-emsdk\n\n      - name: yarn test\n        run: yarn test\n        working-directory: javascript\n\n  lint:\n    name: ESLint (All Packages)\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: yarn lint\n        run: yarn lint\n\n  typecheck:\n    name: Typecheck\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: yarn tsc\n        run: yarn tsc\n        working-directory: javascript\n\n  pack:\n    name: Pack\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Restore emsdk\n        uses: ./.github/actions/cache-emsdk\n\n      - name: yarn pack\n        run: yarn pack --filename yoga-layout.tar.gz\n        working-directory: javascript\n\n      - uses: actions/upload-artifact@v4\n        with:\n          name: npm-package\n          path: javascript/yoga-layout.tar.gz\n"
  },
  {
    "path": ".github/workflows/validate-swiftpm.yml",
    "content": "name: Validate SwiftPM\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - 'release-*'\n  workflow_dispatch:\n\njobs:\n  test:\n    name: Build\n    runs-on: macos-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-apple\n\n      - name: Build Debug\n        run: swift build -c debug\n\n      - name: Build Release\n        run: swift build -c release\n"
  },
  {
    "path": ".github/workflows/validate-tests.yml",
    "content": "name: Validate Tests\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n  validate:\n    name: Validate\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup JS\n        uses: ./.github/actions/setup-js\n\n      - name: yarn gentest-validate\n        run: yarn gentest-validate\n\n      - name: yarn gentest\n        run: yarn gentest -h\n\n      - name: Check for modified tests\n        run: |\n          if [[ -n $(git status -s) ]]; then\n            git status -s\n            echo \"yarn gentest modified these tests. Please run yarn gentest to resolve.\"\n            exit 1\n          fi\n"
  },
  {
    "path": ".github/workflows/validate-website.yml",
    "content": "name: Validate Website\n\non:\n  pull_request:\n    branches:\n      - main\n  push:\n    branches:\n      - main\n  workflow_dispatch:\n\njobs:\n  build_next:\n    name: Build\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: Restore emsdk\n        uses: ./.github/actions/cache-emsdk\n\n      - name: Build Website\n        run: yarn build\n        working-directory: website\n\n  typecheck:\n    name: Typecheck [Docusaurus]\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup\n        uses: ./.github/actions/setup-js\n\n      - name: yarn tsc\n        run: yarn tsc\n        working-directory: website\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_STORE\n\n/buck-cache/\n/buck-out/\n/.buckconfig.local\n/.buckd\n/gentest/test.html\n.buck-java11\nnode_modules\n\n# Jekyll\n/.sass-cache/\n/_site/\n\n# Visual studio code\n!.vscode\n\n*.pdb\n*.tlog\n*.obj\n*.pch\n*.log\n*.orig\n\n# Xcode\n## Build generated\nbuild/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n\n## Other\n*.moved-aside\n*.xcuserstate\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n#\nPods/\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# Gradle\n.gradle\nlocal.properties\n\n# NDK/CMake\n.cxx\n.externalNativeBuild\n\n# Docusarus build\n.docusaurus\n\n# Android Studio\n.idea\n"
  },
  {
    "path": ".prettierignore",
    "content": "**/binaries/**\n**/build/**\n**/generated/**\n"
  },
  {
    "path": ".prettierrc.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nmodule.exports = {\n  arrowParens: 'avoid',\n  bracketSameLine: true,\n  bracketSpacing: false,\n  singleQuote: true,\n  trailingComma: 'all',\n};\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"ms-vscode.cpptools\",\n    \"EditorConfig.EditorConfig\",\n    \"dbaeumer.vscode-eslint\",\n  ]\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Debug C++ Unit tests (lldb)\",\n      \"type\": \"cppdbg\",\n      \"MIMode\": \"lldb\",\n      \"request\": \"launch\",\n      \"program\": \"${workspaceFolder}/tests/build/yogatests\",\n      \"cwd\": \"${workspaceFolder}\",\n      \"preLaunchTask\": \"Build Unit Tests\"\n    },\n    {\n      \"name\": \"Debug C++ Unit tests (vsdbg)\",\n      \"type\": \"cppvsdbg\",\n      \"request\": \"launch\",\n      \"program\": \"${workspaceFolder}/tests/build/yogatests\",\n      \"cwd\": \"${workspaceFolder}\",\n      \"preLaunchTask\": \"Build Unit Tests\"\n    }\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"editor.formatOnSave\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": true\n  },\n  \"eslint.format.enable\": true,\n  \"eslint.packageManager\": \"yarn\",\n  \"eslint.enable\": true,\n  \"eslint.validate\": [\n    \"javascript\",\n    \"javascriptreact\",\n    \"typescript\",\n    \"typescriptreact\"\n  ],\n  \"eslint.workingDirectories\": [\n    {\n      \"mode\": \"auto\"\n    }\n  ],\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n  // See https://go.microsoft.com/fwlink/?LinkId=733558\n  // for the documentation about the tasks.json format\n  \"version\": \"2.0.0\",\n  \"tasks\": [\n    {\n      \"label\": \"Build Unit Tests\",\n      \"type\": \"shell\",\n      \"command\": \"(which ninja && cmake -B build -S . -D CMAKE_BUILD_TYPE=Debug -G Ninja || cmake -B build -S . -D CMAKE_BUILD_TYPE=Debug) && cmake --build build\",\n      \"windows\": {\n        \"command\": \"(where ninja && cmake -B build -S . -D CMAKE_BUILD_TYPE=Debug -G Ninja || cmake -B build -S . -D CMAKE_BUILD_TYPE=Debug) && cmake --build build\",\n      },\n      \"group\": \"build\",\n      \"options\": {\n        \"cwd\": \"tests\"\n      },\n      \"presentation\": {\n        \"reveal\": \"always\",\n        \"panel\": \"new\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(yoga-all)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\ninclude(${CMAKE_CURRENT_SOURCE_DIR}/cmake/project-defaults.cmake)\n\nadd_subdirectory(yoga)\nadd_subdirectory(tests)\n\noption(BUILD_FUZZ_TESTS \"Build fuzz tests\" OFF)\n\nif ('${CMAKE_CXX_COMPILER_ID}' MATCHES 'Clang' AND  BUILD_FUZZ_TESTS)\n    add_subdirectory(fuzz)\nendif()\n\n# cmake install config\ninclude(GNUInstallDirs)\ninclude(CMakePackageConfigHelpers)\n\n# declare target to install\ninstall(TARGETS yogacore EXPORT yoga-targets\n    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}\n    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}\n)\n\n# install header files\ninstall(DIRECTORY\n    \"${CMAKE_CURRENT_LIST_DIR}/yoga\"\n    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}\n    FILES_MATCHING PATTERN \"*.h\"\n)\n\n# install target config\ninstall(EXPORT yoga-targets\n    FILE yogaTargets.cmake\n    NAMESPACE yoga::\n    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/yoga\n)\n\n\n# generate config file\nconfigure_package_config_file(\n    ${CMAKE_CURRENT_SOURCE_DIR}/cmake/yoga-config.cmake.in\n    ${CMAKE_CURRENT_BINARY_DIR}/yogaConfig.cmake\n    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/yoga\n)\n\n# install config file\ninstall(FILES\n    ${CMAKE_CURRENT_BINARY_DIR}/yogaConfig.cmake\n    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/yoga\n)\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to make participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when\nan individual is representing the project or its community in public spaces.\nExamples of representing a project or community include using an official\nproject e-mail address, posting via an official social media account, or acting\nas an appointed representative at an online or offline event. Representation of\na project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at <opensource-conduct@fb.com>. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to yoga\nWe want to make contributing to this project as easy and transparent as\npossible.\n\n## Code of Conduct\n\nFacebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.fb.com/codeofconduct/) so that you can understand what actions will and will not be tolerated.\n\n## Pull Requests\nWe actively welcome your pull requests.\n1. Fork the repo and create your branch from `main`.\n2. If you've added code that should be tested, add tests\n3. If you've changed APIs, update the documentation.\n4. Ensure the test suite passes.\n5. Make sure your code lints.\n6. If you haven't already, complete the Contributor License Agreement (\"CLA\").\n\n## Contributor License Agreement (\"CLA\")\nIn order to accept your pull request, we need you to submit a CLA. You only need\nto do this once to work on any of Facebook's open source projects.\n\nComplete your CLA here: <https://code.facebook.com/cla>\n\n## Issues\nWe use GitHub issues to track public bugs. Please ensure your description is\nclear and has sufficient instructions to be able to reproduce the issue.\n\nFacebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe\ndisclosure of security bugs. In those cases, please go through the process\noutlined on that page and do not file a public issue.\n\n## License\nBy contributing to yoga, you agree that your contributions will be licensed\nunder its MIT license.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) Facebook, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "LICENSE-examples",
    "content": "The examples provided by Facebook are for non-commercial testing and evaluation\npurposes only. Facebook reserves all rights not expressly granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nFACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.0\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"yoga\",\n    products: [\n        .library(name: \"yoga\", targets: [ \"core\" ])\n    ],\n    targets: [\n        .target(\n            name: \"core\",\n            path: \".\",\n            sources: [\n                \"yoga\"\n            ],\n            publicHeadersPath: \".\",\n            cxxSettings: [\n                .headerSearchPath(\".\")\n            ]\n        )\n    ],\n    cxxLanguageStandard: CXXLanguageStandard(rawValue: \"c++20\")\n)\n"
  },
  {
    "path": "README.md",
    "content": "# Yoga [![npm](https://img.shields.io/npm/v/yoga-layout.svg)](https://www.npmjs.com/package/yoga-layout) [![Maven Central](https://img.shields.io/maven-central/v/com.facebook.yoga/yoga)](https://search.maven.org/artifact/com.facebook.yoga/yoga) ![SPM](https://img.shields.io/badge/SPM-Supported-blue.svg)\n\nYoga is an embeddable and performant flexbox layout engine with bindings for multiple languages.\n\n## Building\n\nYoga's main implementation targets C++ 20 with accompanying build logic in CMake. A wrapper is provided to build the main library and run unit tests.\n\n```sh\n./unit_tests <Debug|Release>\n```\n\nWhile not required, this script will use [ninja](https://ninja-build.org/) if it is installed for faster builds.\n\nYoga is additionally part of the [vcpkg](https://github.com/Microsoft/vcpkg/) collection of ports maintained by Microsoft and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.\n\n## Adding Tests\n\nMany of Yoga's tests are automatically generated, using HTML fixtures describing node structure. These are rendered in Chrome to generate an expected layout result for the tree. New fixtures can be added to `gentest/fixtures`.\n\n```html\n<div id=\"my_test\" style=\"width: 100px; height: 100px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n```\n\nTo generate new tests from added fixtures:\n\n1. Ensure you have [yarn classic](https://classic.yarnpkg.com) installed.\n2. Run `yarn install` to install dependencies for the test generator.\n3. Run `yarn gentest` in the `yoga` directory.\n\n## Debugging\n\nYoga provides a VSCode \"launch.json\" configuration which allows debugging unit tests. Simply add your breakpoints, and run \"Debug C++ Unit tests (lldb)\" (or \"Debug C++ Unit tests (vsdbg)\" on Windows).\n"
  },
  {
    "path": "benchmark/Benchmark.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <chrono>\n#include <filesystem>\n#include <fstream>\n#include <iostream>\n#include <thread>\n\n#include <benchmark/Benchmark.h>\n#include <benchmark/TreeDeserialization.h>\n#include <capture/CaptureTree.h>\n#include <nlohmann/json.hpp>\n\nnamespace facebook::yoga {\n\nusing namespace nlohmann;\nusing namespace std::chrono;\n\nconstexpr uint32_t kNumRepetitions = 100;\nusing SteadyClockDurations =\n    std::array<steady_clock::duration, kNumRepetitions>;\n\nstatic bool inputsMatch(\n    float actualWidth,\n    float expectedWidth,\n    float actualHeight,\n    float expectedHeight,\n    YGMeasureMode actualWidthMode,\n    YGMeasureMode expectedWidthMode,\n    YGMeasureMode actualHeightMode,\n    YGMeasureMode expectedHeightMode) {\n  bool widthsAreUndefined =\n      YGFloatIsUndefined(actualWidth) && YGFloatIsUndefined(expectedWidth);\n  bool widthsAreEqual = widthsAreUndefined || actualWidth == expectedWidth;\n  bool heightsAreUndefined =\n      YGFloatIsUndefined(actualHeight) && YGFloatIsUndefined(expectedHeight);\n  bool heightsAreEqual = heightsAreUndefined || actualHeight == expectedHeight;\n\n  return widthsAreEqual && heightsAreEqual &&\n      actualWidthMode == expectedWidthMode &&\n      actualHeightMode == expectedHeightMode;\n}\n\nYGSize defaultMeasureFunctionResult() {\n  std::cout << \"Trying to measure a node that wasn't serialized\" << std::endl;\n  return {10.0, 10.0};\n}\n\nYGSize mockMeasureFunc(\n    YGNodeConstRef node,\n    float availableWidth,\n    YGMeasureMode widthMode,\n    float availableHeight,\n    YGMeasureMode heightMode) {\n  (void)node;\n  auto fnsPtr = static_cast<SerializedMeasureFuncMap*>(YGNodeGetContext(node));\n\n  if (fnsPtr == nullptr) {\n    return defaultMeasureFunctionResult();\n  }\n\n  auto fnsIt = fnsPtr->find(node);\n  if (fnsIt == fnsPtr->end()) {\n    return defaultMeasureFunctionResult();\n  }\n\n  for (auto measureFunc : fnsIt->second) {\n    if (inputsMatch(\n            availableWidth,\n            measureFunc.inputWidth,\n            availableHeight,\n            measureFunc.inputHeight,\n            widthMode,\n            measureFunc.widthMode,\n            heightMode,\n            measureFunc.heightMode)) {\n      std::this_thread::sleep_for(\n          std::chrono::nanoseconds(measureFunc.durationNs));\n      return {measureFunc.outputWidth, measureFunc.outputHeight};\n    }\n  }\n\n  return defaultMeasureFunctionResult();\n}\n\nstd::shared_ptr<const YGConfig> buildConfigFromJson(const json& j) {\n  json jsonConfig = j[\"config\"];\n  std::shared_ptr<YGConfig> config(YGConfigNew(), YGConfigFree);\n  for (json::iterator it = jsonConfig.begin(); it != jsonConfig.end(); it++) {\n    if (it.key() == \"use-web-defaults\") {\n      YGConfigSetUseWebDefaults(config.get(), it.value());\n    } else if (it.key() == \"point-scale-factor\") {\n      YGConfigSetPointScaleFactor(config.get(), it.value());\n    } else if (it.key() == \"errata\") {\n      YGConfigSetErrata(config.get(), errataFromString(it.value()));\n    } else if (it.key() == \"experimental-features\") {\n      // Experimental features is serialized into an array where the values\n      // present indicate that that feature is enabled\n      for (json::iterator efIt = it.value().begin(); efIt != it.value().end();\n           efIt++) {\n        YGConfigSetExperimentalFeatureEnabled(\n            config.get(), experimentalFeatureFromString(efIt.value()), true);\n      }\n    }\n  }\n\n  return config;\n}\n\nstd::string edgeStringFromPropertyName(\n    const std::string& key,\n    const std::string& propertyName) {\n  return key.substr(propertyName.length() + 1);\n}\n\nvoid setStylesFromJson(const json& j, YGNodeRef node) {\n  json style = j[\"style\"];\n  for (const auto& [key, value] : style.items()) {\n    if (key == \"flex-direction\") {\n      YGNodeStyleSetFlexDirection(node, flexDirectionFromString(value));\n    } else if (key == \"justify-content\") {\n      YGNodeStyleSetJustifyContent(node, justifyContentFromString(value));\n    } else if (key == \"align-items\") {\n      YGNodeStyleSetAlignItems(node, alignFromString(value));\n    } else if (key == \"align-content\") {\n      YGNodeStyleSetAlignContent(node, alignFromString(value));\n    } else if (key == \"align-self\") {\n      YGNodeStyleSetAlignSelf(node, alignFromString(value));\n    } else if (key == \"flex-wrap\") {\n      YGNodeStyleSetFlexWrap(node, wrapFromString(value));\n    } else if (key == \"overflow\") {\n      YGNodeStyleSetOverflow(node, overflowFromString(value));\n    } else if (key == \"display\") {\n      YGNodeStyleSetDisplay(node, displayFromString(value));\n    } else if (key == \"position-type\") {\n      YGNodeStyleSetPositionType(node, positionTypeFromString(value));\n    } else if (key == \"flex-grow\") {\n      YGNodeStyleSetFlexGrow(node, value);\n    } else if (key == \"flex-shrink\") {\n      YGNodeStyleSetFlexShrink(node, value);\n    } else if (key == \"flex\") {\n      YGNodeStyleSetFlex(node, value);\n    } else if (key == \"flex-basis\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitAuto) {\n        YGNodeStyleSetFlexBasisAuto(node);\n      } else if (unit == YGUnitPoint) {\n        YGNodeStyleSetFlexBasis(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetFlexBasisPercent(node, value[\"value\"]);\n      }\n    } else if (key.starts_with(\"position\")) {\n      YGEdge edge = edgeFromString(edgeStringFromPropertyName(key, \"position\"));\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetPosition(node, edge, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetPositionPercent(node, edge, value[\"value\"]);\n      }\n    } else if (key.starts_with(\"padding\")) {\n      YGEdge edge = edgeFromString(edgeStringFromPropertyName(key, \"padding\"));\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetPadding(node, edge, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetPaddingPercent(node, edge, value[\"value\"]);\n      }\n    } else if (key.starts_with(\"border\")) {\n      YGEdge edge = edgeFromString(edgeStringFromPropertyName(key, \"border\"));\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetBorder(node, edge, value[\"value\"]);\n      }\n    } else if (key.starts_with(\"margin\")) {\n      YGEdge edge = edgeFromString(edgeStringFromPropertyName(key, \"margin\"));\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetMargin(node, edge, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetMarginPercent(node, edge, value[\"value\"]);\n      } else if (unit == YGUnitAuto) {\n        YGNodeStyleSetMarginAuto(node, edge);\n      }\n    } else if (key == \"gap\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetGap(node, YGGutterAll, value[\"value\"]);\n      }\n    } else if (key == \"column-gap\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetGap(node, YGGutterColumn, value[\"value\"]);\n      }\n    } else if (key == \"row-gap\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetGap(node, YGGutterRow, value[\"value\"]);\n      }\n    } else if (key == \"height\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitAuto) {\n        YGNodeStyleSetHeightAuto(node);\n      } else if (unit == YGUnitPoint) {\n        YGNodeStyleSetHeight(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetHeightPercent(node, value[\"value\"]);\n      }\n    } else if (key == \"width\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitAuto) {\n        YGNodeStyleSetWidthAuto(node);\n      } else if (unit == YGUnitPoint) {\n        YGNodeStyleSetWidth(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetWidthPercent(node, value[\"value\"]);\n      }\n    } else if (key == \"min-height\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetMinHeight(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetMinHeightPercent(node, value[\"value\"]);\n      }\n    } else if (key == \"min-width\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetMinWidth(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetMinWidthPercent(node, value[\"value\"]);\n      }\n    } else if (key == \"max-height\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetMaxHeight(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetMaxHeightPercent(node, value[\"value\"]);\n      }\n    } else if (key == \"max-width\") {\n      YGUnit unit = unitFromJson(value);\n      if (unit == YGUnitPoint) {\n        YGNodeStyleSetMaxWidth(node, value[\"value\"]);\n      } else if (unit == YGUnitPercent) {\n        YGNodeStyleSetMaxWidthPercent(node, value[\"value\"]);\n      }\n    }\n  }\n}\n\nstd::shared_ptr<YGNode> buildNodeFromJson(\n    const json& j,\n    std::shared_ptr<const YGConfig> config,\n    std::shared_ptr<SerializedMeasureFuncMap> fns) {\n  std::shared_ptr<YGNode> node(YGNodeNewWithConfig(config.get()), YGNodeFree);\n\n  if (!j.contains(\"node\") || j[\"node\"].is_null()) {\n    return node;\n  }\n\n  json nodeState = j[\"node\"];\n  for (json::iterator it = nodeState.begin(); it != nodeState.end(); it++) {\n    if (it.key() == \"always-forms-containing-block\") {\n      YGNodeSetAlwaysFormsContainingBlock(node.get(), it.value());\n    } else if (it.key() == \"measure-funcs\") {\n      std::vector<SerializedMeasureFunc> vec{};\n      for (auto measureFuncJson : it.value()) {\n        vec.push_back(serializedMeasureFuncFromJson(measureFuncJson));\n      }\n      fns->insert(std::make_pair(node.get(), vec));\n      YGNodeSetContext(node.get(), it.value().is_null() ? nullptr : fns.get());\n      YGNodeSetMeasureFunc(node.get(), mockMeasureFunc);\n    }\n  }\n\n  return node;\n}\n\nstd::shared_ptr<YogaNodeAndConfig> buildTreeFromJson(\n    const json& j,\n    std::shared_ptr<SerializedMeasureFuncMap> fns,\n    std::shared_ptr<YogaNodeAndConfig> parent,\n    size_t index) {\n  auto config = buildConfigFromJson(j);\n  auto node = buildNodeFromJson(j, config, fns);\n  auto wrapper = std::make_shared<YogaNodeAndConfig>(\n      node, config, std::vector<std::shared_ptr<YogaNodeAndConfig>>{});\n\n  if (parent != nullptr) {\n    YGNodeInsertChild(parent->node_.get(), node.get(), index);\n    parent->children_.push_back(wrapper);\n  }\n\n  setStylesFromJson(j, node.get());\n\n  if (j.contains(\"children\")) {\n    json children = j[\"children\"];\n    size_t childIndex = 0;\n    for (const json& child : children) {\n      buildTreeFromJson(child, fns, wrapper, childIndex);\n      childIndex++;\n    }\n  }\n\n  return wrapper;\n}\n\nBenchmarkResult generateBenchmark(json& capture) {\n  auto fns = std::make_shared<SerializedMeasureFuncMap>();\n\n  auto treeCreationBegin = steady_clock::now();\n  std::shared_ptr<YogaNodeAndConfig> root =\n      buildTreeFromJson(capture[\"tree\"], fns, nullptr, 0 /*index*/);\n  auto treeCreationEnd = steady_clock::now();\n\n  json layoutInputs = capture[\"layout-inputs\"];\n  float availableWidth = layoutInputs[\"available-width\"];\n  float availableHeight = layoutInputs[\"available-height\"];\n  YGDirection direction = directionFromString(layoutInputs[\"owner-direction\"]);\n\n  auto layoutBegin = steady_clock::now();\n  YGNodeCalculateLayout(\n      root->node_.get(), availableWidth, availableHeight, direction);\n  auto layoutEnd = steady_clock::now();\n\n  return BenchmarkResult{\n      treeCreationEnd - treeCreationBegin, layoutEnd - layoutBegin};\n}\n\nstatic void printBenchmarkResult(\n    const std::string& name,\n    SteadyClockDurations& durations) {\n  std::array<double, kNumRepetitions> timesInMs{};\n  double mean = 0;\n  for (uint32_t i = 0; i < kNumRepetitions; i++) {\n    auto ms = duration<double, std::milli>(durations[i]).count();\n    timesInMs[i] = ms;\n    mean += ms;\n  }\n  mean /= kNumRepetitions;\n\n  std::sort(timesInMs.begin(), timesInMs.end());\n  double median = timesInMs[kNumRepetitions / 2];\n\n  double variance = 0;\n  for (uint32_t i = 0; i < kNumRepetitions; i++) {\n    variance += std::pow(timesInMs[i] - mean, 2);\n  }\n  variance /= kNumRepetitions;\n  double stddev = std::sqrt(variance);\n\n  printf(\"%s: median: %lf ms, stddev: %lf ms\\n\", name.c_str(), median, stddev);\n}\n\nvoid benchmark(std::filesystem::path& capturesDir) {\n  for (auto& capture : std::filesystem::directory_iterator(capturesDir)) {\n    if (capture.is_directory() || capture.path().extension() != \".json\") {\n      continue;\n    }\n\n    SteadyClockDurations treeCreationDurations;\n    SteadyClockDurations layoutDurations;\n    SteadyClockDurations totalDurations;\n\n    std::ifstream captureFile(capture.path());\n    json j = json::parse(captureFile);\n    std::string captureName = capture.path().stem().string();\n\n    std::cout << \"Starting benchmark for \" << captureName << std::endl;\n    for (uint32_t i = 0; i < kNumRepetitions; i++) {\n      BenchmarkResult result = generateBenchmark(j);\n      treeCreationDurations[i] = result.treeCreationDuration;\n      layoutDurations[i] = result.layoutDuration;\n      totalDurations[i] = result.treeCreationDuration + result.layoutDuration;\n    }\n\n    printBenchmarkResult(captureName + \" tree creation\", treeCreationDurations);\n    printBenchmarkResult(captureName + \" layout\", layoutDurations);\n    printBenchmarkResult(captureName + \" total\", totalDurations);\n\n    std::cout << std::endl;\n  }\n}\n\n} // namespace facebook::yoga\n\nint main(int argc, char* argv[]) {\n  if (argc == 2) {\n    std::filesystem::path capturesDir = argv[argc - 1];\n    facebook::yoga::benchmark(capturesDir);\n  } else {\n    throw std::invalid_argument(\"Expecting a path as an argument\");\n    return 1;\n  }\n\n  return 0;\n}\n"
  },
  {
    "path": "benchmark/Benchmark.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nstruct YogaNodeAndConfig {\n  YogaNodeAndConfig(\n      std::shared_ptr<YGNode> node,\n      std::shared_ptr<const YGConfig> config,\n      std::vector<std::shared_ptr<YogaNodeAndConfig>> children)\n      : node_(std::move(node)),\n        config_(std::move(config)),\n        children_(std::move(children)) {}\n\n  std::shared_ptr<YGNode> node_;\n  std::shared_ptr<const YGConfig> config_;\n  std::vector<std::shared_ptr<YogaNodeAndConfig>> children_;\n};\n\nstruct BenchmarkResult {\n  std::chrono::steady_clock::duration treeCreationDuration;\n  std::chrono::steady_clock::duration layoutDuration;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "benchmark/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(benchmark)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\nset(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)\ninclude(${YOGA_ROOT}/cmake/project-defaults.cmake)\n\nadd_subdirectory(${YOGA_ROOT}/yoga ${CMAKE_CURRENT_BINARY_DIR}/yoga)\n\nfile(GLOB SOURCES_LEGACY CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/*.c)\nfile(GLOB SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)\n\nadd_executable(benchmark ${SOURCES})\nadd_executable(benchmarklegacy ${SOURCES_LEGACY})\n\ntarget_link_libraries(benchmark yogacore)\ntarget_link_libraries(benchmarklegacy yogacore)\ntarget_include_directories(benchmark\n    PRIVATE\n    $<BUILD_INTERFACE:${YOGA_ROOT}/lib>)\n"
  },
  {
    "path": "benchmark/TreeDeserialization.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <memory>\n#include <vector>\n\n#include <benchmark/TreeDeserialization.h>\n#include <capture/CaptureTree.h>\n#include <nlohmann/json.hpp>\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nusing namespace nlohmann;\n\nstatic inline bool isAuto(json& j) {\n  return j.is_string() && j == \"auto\";\n}\n\nstatic inline bool isUndefined(json& j) {\n  return j.is_string() && j == \"undefined\";\n}\n\nstatic inline std::string invalidArgumentMessage(\n    const std::string& arg,\n    const std::string& enumName) {\n  return arg + \" does not represent any \" + enumName + \" values\";\n}\n\nstatic inline float floatFromJson(json& j) {\n  float result = YGUndefined;\n  if (!j.is_null()) {\n    result = j;\n  }\n\n  return result;\n}\n\nYGFlexDirection flexDirectionFromString(const std::string& str) {\n  if (str == \"row\") {\n    return YGFlexDirectionRow;\n  } else if (str == \"row-reverse\") {\n    return YGFlexDirectionRowReverse;\n  } else if (str == \"column\") {\n    return YGFlexDirectionColumn;\n  } else if (str == \"column-reverse\") {\n    return YGFlexDirectionColumnReverse;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGFlexDirection\"));\n  }\n}\n\nYGJustify justifyContentFromString(const std::string& str) {\n  if (str == \"flex-start\") {\n    return YGJustifyFlexStart;\n  } else if (str == \"center\") {\n    return YGJustifyCenter;\n  } else if (str == \"flex-end\") {\n    return YGJustifyFlexEnd;\n  } else if (str == \"space-between\") {\n    return YGJustifySpaceBetween;\n  } else if (str == \"space-around\") {\n    return YGJustifySpaceAround;\n  } else if (str == \"space-evenly\") {\n    return YGJustifySpaceEvenly;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGJustify\"));\n  }\n}\n\nYGAlign alignFromString(const std::string& str) {\n  if (str == \"auto\") {\n    return YGAlignAuto;\n  } else if (str == \"flex-start\") {\n    return YGAlignFlexStart;\n  } else if (str == \"center\") {\n    return YGAlignCenter;\n  } else if (str == \"flex-end\") {\n    return YGAlignFlexEnd;\n  } else if (str == \"stretch\") {\n    return YGAlignStretch;\n  } else if (str == \"baseline\") {\n    return YGAlignBaseline;\n  } else if (str == \"space-between\") {\n    return YGAlignSpaceBetween;\n  } else if (str == \"space-around\") {\n    return YGAlignSpaceAround;\n  } else if (str == \"space-evenly\") {\n    return YGAlignSpaceEvenly;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGAlign\"));\n  }\n}\n\nYGWrap wrapFromString(const std::string& str) {\n  if (str == \"no-wrap\") {\n    return YGWrapNoWrap;\n  } else if (str == \"wrap\") {\n    return YGWrapWrap;\n  } else if (str == \"wrap-reverse\") {\n    return YGWrapWrapReverse;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGAlign\"));\n  }\n}\n\nYGOverflow overflowFromString(const std::string& str) {\n  if (str == \"visible\") {\n    return YGOverflowVisible;\n  } else if (str == \"hidden\") {\n    return YGOverflowHidden;\n  } else if (str == \"scroll\") {\n    return YGOverflowScroll;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGAlign\"));\n  }\n}\n\nYGDisplay displayFromString(const std::string& str) {\n  if (str == \"flex\") {\n    return YGDisplayFlex;\n  } else if (str == \"none\") {\n    return YGDisplayNone;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGAlign\"));\n  }\n}\n\nYGPositionType positionTypeFromString(const std::string& str) {\n  if (str == \"static\") {\n    return YGPositionTypeStatic;\n  } else if (str == \"relative\") {\n    return YGPositionTypeRelative;\n  } else if (str == \"absolute\") {\n    return YGPositionTypeAbsolute;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGAlign\"));\n  }\n}\n\nYGUnit unitFromJson(json& j) {\n  if (isAuto(j)) {\n    return YGUnitAuto;\n  }\n  if (isUndefined(j)) {\n    return YGUnitUndefined;\n  }\n\n  std::string unit = j[\"unit\"];\n  if (unit == \"px\") {\n    return YGUnitPoint;\n  } else if (unit == \"pct\") {\n    return YGUnitPercent;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(unit, \"YGUnit\"));\n  }\n}\n\nYGEdge edgeFromString(const std::string& str) {\n  if (str == \"left\") {\n    return YGEdgeLeft;\n  } else if (str == \"top\") {\n    return YGEdgeTop;\n  } else if (str == \"right\") {\n    return YGEdgeRight;\n  } else if (str == \"bottom\") {\n    return YGEdgeBottom;\n  } else if (str == \"start\") {\n    return YGEdgeStart;\n  } else if (str == \"end\") {\n    return YGEdgeEnd;\n  } else if (str == \"horizontal\") {\n    return YGEdgeHorizontal;\n  } else if (str == \"vertical\") {\n    return YGEdgeVertical;\n  } else if (str == \"all\") {\n    return YGEdgeAll;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGEdge\"));\n  }\n}\n\nYGErrata errataFromString(const std::string& str) {\n  if (str == \"none\") {\n    return YGErrataNone;\n  } else if (str == \"all\") {\n    return YGErrataAll;\n  } else if (str == \"classic\") {\n    return YGErrataClassic;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGErrata\"));\n  }\n}\n\nYGExperimentalFeature experimentalFeatureFromString(const std::string& str) {\n  if (str == \"web-flex-basis\") {\n    return YGExperimentalFeatureWebFlexBasis;\n  } else {\n    throw std::invalid_argument(\n        invalidArgumentMessage(str, \"YGExperimentalFeature\"));\n  }\n}\n\nstd::string edgeStringFromPropertyName(\n    const json::iterator& it,\n    const std::string& propertyName) {\n  return it.key().substr(propertyName.length() + 1);\n}\n\nYGDirection directionFromString(const std::string& str) {\n  if (str == \"ltr\") {\n    return YGDirectionLTR;\n  } else if (str == \"rtl\") {\n    return YGDirectionRTL;\n  } else if (str == \"inherit\") {\n    return YGDirectionInherit;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGDirection\"));\n  }\n}\n\nYGMeasureMode measureModeFromString(const std::string& str) {\n  if (str == \"at-most\") {\n    return YGMeasureModeAtMost;\n  } else if (str == \"exactly\") {\n    return YGMeasureModeExactly;\n  } else if (str == \"undefined\") {\n    return YGMeasureModeUndefined;\n  } else {\n    throw std::invalid_argument(invalidArgumentMessage(str, \"YGMeasureMode\"));\n  }\n}\n\nSerializedMeasureFunc serializedMeasureFuncFromJson(json& j) {\n  return SerializedMeasureFunc{\n      .inputWidth = floatFromJson(j[\"width\"]),\n      .widthMode = measureModeFromString(j[\"width-mode\"]),\n      .inputHeight = floatFromJson(j[\"height\"]),\n      .heightMode = measureModeFromString(j[\"height-mode\"]),\n      .outputWidth = floatFromJson(j[\"output-width\"]),\n      .outputHeight = floatFromJson(j[\"output-height\"]),\n      .durationNs = j[\"duration-ns\"]};\n}\n} // namespace facebook::yoga\n"
  },
  {
    "path": "benchmark/TreeDeserialization.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n#include <vector>\n\n#include <capture/CaptureTree.h>\n#include <nlohmann/json.hpp>\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nusing namespace nlohmann;\n\nYGFlexDirection flexDirectionFromString(const std::string& str);\n\nYGJustify justifyContentFromString(const std::string& str);\n\nYGAlign alignFromString(const std::string& str);\n\nYGWrap wrapFromString(const std::string& str);\n\nYGOverflow overflowFromString(const std::string& str);\n\nYGDisplay displayFromString(const std::string& str);\n\nYGPositionType positionTypeFromString(const std::string& str);\n\nYGUnit unitFromJson(json& j);\n\nYGEdge edgeFromString(const std::string& str);\n\nYGErrata errataFromString(const std::string& str);\n\nYGExperimentalFeature experimentalFeatureFromString(const std::string& str);\n\nstd::string edgeStringFromPropertyName(\n    const json::iterator& it,\n    const std::string& propertyName);\n\nYGDirection directionFromString(const std::string& str);\n\nYGMeasureMode measureModeFromString(const std::string& str);\n\nSerializedMeasureFunc serializedMeasureFuncFromJson(json& j);\n} // namespace facebook::yoga\n"
  },
  {
    "path": "benchmark/YGBenchmark.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <math.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n\n#include <yoga/Yoga.h>\n\n#define NUM_REPETITIONS 1000\n\n#define YGBENCHMARKS(BLOCK)                \\\n  int main(int argc, char const* argv[]) { \\\n    (void)argc;                            \\\n    (void)argv;                            \\\n    clock_t __start;                       \\\n    clock_t __endTimes[NUM_REPETITIONS];   \\\n    {                                      \\\n      BLOCK                                \\\n    }                                      \\\n    return 0;                              \\\n  }\n\n#define YGBENCHMARK(NAME, BLOCK)                         \\\n  __start = clock();                                     \\\n  for (uint32_t __i = 0; __i < NUM_REPETITIONS; __i++) { \\\n    {BLOCK} __endTimes[__i] = clock();                   \\\n  }                                                      \\\n  __printBenchmarkResult(NAME, __start, __endTimes);\n\nstatic int __compareDoubles(const void* a, const void* b) {\n  double arg1 = *(const double*)a;\n  double arg2 = *(const double*)b;\n\n  if (arg1 < arg2) {\n    return -1;\n  }\n\n  if (arg1 > arg2) {\n    return 1;\n  }\n\n  return 0;\n}\n\nstatic void\n__printBenchmarkResult(char* name, clock_t start, const clock_t* endTimes) {\n  double timesInMs[NUM_REPETITIONS];\n  double mean = 0;\n  clock_t lastEnd = start;\n  for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {\n    timesInMs[i] =\n        ((double)(endTimes[i] - lastEnd)) / (double)CLOCKS_PER_SEC * 1000;\n    lastEnd = endTimes[i];\n    mean += timesInMs[i];\n  }\n  mean /= NUM_REPETITIONS;\n\n  qsort(timesInMs, NUM_REPETITIONS, sizeof(double), __compareDoubles);\n  double median = timesInMs[NUM_REPETITIONS / 2];\n\n  double variance = 0;\n  for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {\n    variance += pow(timesInMs[i] - mean, 2);\n  }\n  variance /= NUM_REPETITIONS;\n  double stddev = sqrt(variance);\n\n  printf(\"%s: median: %lf ms, stddev: %lf ms\\n\", name, median, stddev);\n}\n\nstatic YGSize _measure(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  (void)node;\n  return (YGSize){\n      .width = widthMode == YGMeasureModeUndefined ? 10 : width,\n      .height = heightMode == YGMeasureModeUndefined ? 10 : height,\n  };\n}\n\nYGBENCHMARKS({\n  YGBENCHMARK(\"Stack with flex\", {\n    const YGNodeRef root = YGNodeNew();\n    YGNodeStyleSetWidth(root, 100);\n    YGNodeStyleSetHeight(root, 100);\n\n    for (uint32_t i = 0; i < 10; i++) {\n      const YGNodeRef child = YGNodeNew();\n      YGNodeSetMeasureFunc(child, _measure);\n      YGNodeStyleSetFlex(child, 1);\n      YGNodeInsertChild(root, child, 0);\n    }\n\n    YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n    YGNodeFreeRecursive(root);\n  });\n\n  YGBENCHMARK(\"Align stretch in undefined axis\", {\n    const YGNodeRef root = YGNodeNew();\n\n    for (uint32_t i = 0; i < 10; i++) {\n      const YGNodeRef child = YGNodeNew();\n      YGNodeStyleSetHeight(child, 20);\n      YGNodeSetMeasureFunc(child, _measure);\n      YGNodeInsertChild(root, child, 0);\n    }\n\n    YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n    YGNodeFreeRecursive(root);\n  });\n\n  YGBENCHMARK(\"Nested flex\", {\n    const YGNodeRef root = YGNodeNew();\n\n    for (uint32_t i = 0; i < 10; i++) {\n      const YGNodeRef child = YGNodeNew();\n      YGNodeStyleSetFlex(child, 1);\n      YGNodeInsertChild(root, child, 0);\n\n      for (uint32_t ii = 0; ii < 10; ii++) {\n        const YGNodeRef grandChild = YGNodeNew();\n        YGNodeSetMeasureFunc(grandChild, _measure);\n        YGNodeStyleSetFlex(grandChild, 1);\n        YGNodeInsertChild(child, grandChild, 0);\n      }\n    }\n\n    YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n    YGNodeFreeRecursive(root);\n  });\n\n  YGBENCHMARK(\"Huge nested layout\", {\n    const YGNodeRef root = YGNodeNew();\n\n    for (uint32_t i = 0; i < 10; i++) {\n      const YGNodeRef child = YGNodeNew();\n      YGNodeStyleSetFlexGrow(child, 1);\n      YGNodeStyleSetWidth(child, 10);\n      YGNodeStyleSetHeight(child, 10);\n      YGNodeInsertChild(root, child, 0);\n\n      for (uint32_t ii = 0; ii < 10; ii++) {\n        const YGNodeRef grandChild = YGNodeNew();\n        YGNodeStyleSetFlexDirection(grandChild, YGFlexDirectionRow);\n        YGNodeStyleSetFlexGrow(grandChild, 1);\n        YGNodeStyleSetWidth(grandChild, 10);\n        YGNodeStyleSetHeight(grandChild, 10);\n        YGNodeInsertChild(child, grandChild, 0);\n\n        for (uint32_t iii = 0; iii < 10; iii++) {\n          const YGNodeRef grandGrandChild = YGNodeNew();\n          YGNodeStyleSetFlexGrow(grandGrandChild, 1);\n          YGNodeStyleSetWidth(grandGrandChild, 10);\n          YGNodeStyleSetHeight(grandGrandChild, 10);\n          YGNodeInsertChild(grandChild, grandGrandChild, 0);\n\n          for (uint32_t iiii = 0; iiii < 10; iiii++) {\n            const YGNodeRef grandGrandGrandChild = YGNodeNew();\n            YGNodeStyleSetFlexDirection(\n                grandGrandGrandChild, YGFlexDirectionRow);\n            YGNodeStyleSetFlexGrow(grandGrandGrandChild, 1);\n            YGNodeStyleSetWidth(grandGrandGrandChild, 10);\n            YGNodeStyleSetHeight(grandGrandGrandChild, 10);\n            YGNodeInsertChild(grandGrandChild, grandGrandGrandChild, 0);\n          }\n        }\n      }\n    }\n\n    YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n    YGNodeFreeRecursive(root);\n  });\n});\n"
  },
  {
    "path": "benchmark/benchmark",
    "content": "#!/bin/sh\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\ncd \"$(dirname \"$0\")\" || exit\nCAPTURES_PATH=\"$(dirname \"$(realpath \"$0\")\")\"\"/captures\"\n\nif [ \"$1\" = \"buck\" ]; then\n  buck run @//fbcode/mode/opt :benchmarkCXX \"${CAPTURES_PATH}\"\nelse\n  cmake -B build -S . -D CMAKE_BUILD_TYPE=Release\n  cmake --build build\n  build/benchmark \"${CAPTURES_PATH}\"\nfi\n"
  },
  {
    "path": "benchmark/captures/chat-mac.json",
    "content": "{\n  \"layout-inputs\": {\n    \"available-height\": 768.0,\n    \"available-width\": 1024.0,\n    \"owner-direction\": \"ltr\"\n  },\n  \"tree\": {\n    \"children\": [\n      {\n        \"children\": [\n          {\n            \"children\": [\n              {\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"style\": {\n                  \"flex\": 1.0,\n                  \"position-bottom\": {\n                    \"unit\": \"px\",\n                    \"value\": 0.0\n                  },\n                  \"position-left\": {\n                    \"unit\": \"px\",\n                    \"value\": 0.0\n                  },\n                  \"position-type\": \"absolute\"\n                }\n              },\n              {\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"style\": {\n                  \"flex\": 1.0,\n                  \"position-bottom\": {\n                    \"unit\": \"px\",\n                    \"value\": 0.0\n                  },\n                  \"position-left\": {\n                    \"unit\": \"px\",\n                    \"value\": 0.0\n                  },\n                  \"position-type\": \"absolute\"\n                }\n              },\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          },\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"align-self\": \"center\",\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      },\n                                                                      \"margin-all\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 6.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"flex-grow\": 1.0,\n                                                                  \"flex-shrink\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex-direction\": \"row\",\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          },\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"align-self\": \"center\",\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      },\n                                                                      \"margin-all\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 6.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"flex-grow\": 1.0,\n                                                                  \"flex-shrink\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex-direction\": \"row\",\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          },\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"align-self\": \"center\",\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      },\n                                                                      \"margin-all\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 6.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"flex-grow\": 1.0,\n                                                                  \"flex-shrink\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex-direction\": \"row\",\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          },\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 28.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"align-self\": \"center\",\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      },\n                                                                      \"margin-all\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 6.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"flex-grow\": 1.0,\n                                                                  \"flex-shrink\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex-direction\": \"row\",\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": null\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": null\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": {\n                                                      \"flex-grow\": 1.0,\n                                                      \"flex-shrink\": 1.0\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"position-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              },\n                                                                                              \"position-left\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              },\n                                                                                              \"position-right\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              },\n                                                                                              \"position-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              },\n                                                                                              \"position-type\": \"absolute\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-items\": \"center\",\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 32.0\n                                                                                          },\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 32.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"flex\": 1.0\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"flex\": 1.0\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-self\": \"center\",\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 32.0\n                                                              },\n                                                              \"margin-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 13.0\n                                                              },\n                                                              \"margin-end\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 13.0\n                                                              },\n                                                              \"margin-start\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 14.0\n                                                              },\n                                                              \"margin-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 12.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 32.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"align-content\": \"center\",\n                                                          \"flex-direction\": \"row\",\n                                                          \"justify-content\": \"center\"\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": null\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"align-content\": \"stretch\",\n                                                  \"flex\": 1.0,\n                                                  \"margin-top\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 28.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"overflow\": \"hidden\",\n                                              \"width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 70.0\n                                              }\n                                            }\n                                          },\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"height\": {\n                                                    \"unit\": \"pct\",\n                                                    \"value\": 100.0\n                                                  },\n                                                  \"width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 1.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"margin-horizontal\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -1.0\n                                              },\n                                              \"min-width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 10.0\n                                              },\n                                              \"position-bottom\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"position-left\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 70.0\n                                              },\n                                              \"position-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"position-type\": \"absolute\",\n                                              \"width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 10.0\n                                              }\n                                            }\n                                          },\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"node\": {\n                                                              \"measure-funcs\": [\n                                                                {\n                                                                  \"duration-ns\": 28125,\n                                                                  \"height\": 732.0,\n                                                                  \"height-mode\": \"at-most\",\n                                                                  \"output-height\": 23.0,\n                                                                  \"output-width\": 55.5,\n                                                                  \"width\": 294.0,\n                                                                  \"width-mode\": \"at-most\"\n                                                                }\n                                                              ]\n                                                            },\n                                                            \"style\": {\n                                                              \"margin-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": -2.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"align-items\": \"flex-start\",\n                                                          \"flex-shrink\": 1.0,\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 28.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"border-all\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 36.0\n                                                                  },\n                                                                  \"justify-content\": \"center\",\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 36.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"border-all\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 36.0\n                                                              },\n                                                              \"justify-content\": \"center\",\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 36.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"align-self\": \"flex-start\",\n                                                          \"flex-direction\": \"row\",\n                                                          \"margin-right\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 8.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": {\n                                                      \"align-items\": \"center\",\n                                                      \"flex-direction\": \"row\",\n                                                      \"justify-content\": \"space-between\",\n                                                      \"padding-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 8.0\n                                                      },\n                                                      \"padding-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 30.0\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 16.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 16.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 16.0\n                                                                          },\n                                                                          \"margin-start\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 0.0\n                                                                          },\n                                                                          \"position-top\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -8.0\n                                                                          },\n                                                                          \"position-type\": \"absolute\"\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"justify-content\": \"center\",\n                                                                      \"margin-horizontal\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      },\n                                                                      \"margin-vertical\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 0.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 16.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"position-left\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"position-type\": \"absolute\"\n                                                                }\n                                                              },\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"node\": {\n                                                                  \"measure-funcs\": [\n                                                                    {\n                                                                      \"duration-ns\": 8625,\n                                                                      \"height\": 659.0,\n                                                                      \"height-mode\": \"at-most\",\n                                                                      \"output-height\": 16.0,\n                                                                      \"output-width\": 236.0,\n                                                                      \"width\": 236.0,\n                                                                      \"width-mode\": \"exactly\"\n                                                                    }\n                                                                  ]\n                                                                },\n                                                                \"style\": {\n                                                                  \"border-all\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"flex\": 1.0,\n                                                                  \"margin-all\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"margin-end\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 32.0\n                                                                  },\n                                                                  \"padding-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 10.0\n                                                                  },\n                                                                  \"padding-end\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 24.0\n                                                                  },\n                                                                  \"padding-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 10.0\n                                                                  },\n                                                                  \"padding-start\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 24.0\n                                                                  },\n                                                                  \"padding-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 10.0\n                                                                  },\n                                                                  \"padding-vertical\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 6.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": null\n                                                                  },\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 14.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 14.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"align-items\": \"center\",\n                                                                              \"border-all\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 0.0\n                                                                              },\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 16.0\n                                                                              },\n                                                                              \"justify-content\": \"center\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 16.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"align-items\": \"center\",\n                                                                          \"border-all\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 0.0\n                                                                          },\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 16.0\n                                                                          },\n                                                                          \"justify-content\": \"center\",\n                                                                          \"padding-all\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 0.0\n                                                                          },\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 16.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"display\": \"none\"\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"position-right\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"position-type\": \"absolute\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"border-all\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 1.0\n                                                              },\n                                                              \"flex-direction\": \"row\",\n                                                              \"margin-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 6.0\n                                                              },\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 12.0\n                                                              },\n                                                              \"margin-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 7.0\n                                                              },\n                                                              \"min-width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 60.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 1.0\n                                                          },\n                                                          \"margin-horizontal\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 12.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 8458,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 30.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 10917,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 36.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 8166,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 32.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6250,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 50.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7750,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 28.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6708,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 49.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6625,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 32.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6083,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 28.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6542,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 33.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6083,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 33.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6833,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 45.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6166,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 29.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7666,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 34.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6000,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 14.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6834,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 25.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5959,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 50.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6500,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 47.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 12625,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 48.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7333,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 24.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5875,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 45.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 39.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6792,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 46.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6542,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 33.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6333,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 33.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6500,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 47.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5833,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 48.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6583,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 29.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5875,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 50.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6792,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 46.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6167,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 39.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6625,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 27.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5916,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 43.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6250,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 31.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5792,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 39.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 39.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6458,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 36.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6291,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 40.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5750,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 21.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6291,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 20.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6292,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 23.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6334,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 32.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6250,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 42.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6709,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 18.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6542,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 49.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6458,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 42.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 30.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 34.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6166,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 42.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6750,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 38.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5709,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 46.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 26.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5833,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 28.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6334,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 27.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5958,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 49.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6333,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 49.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5917,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 38.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 8500,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 31.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 5875,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 30.0,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"flex-end\",\n                                                                                                                      \"justify-content\": \"flex-end\",\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6375,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 41.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 6292,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 14.0,\n                                                                                                                          \"output-width\": 37.5,\n                                                                                                                          \"width\": 50.0,\n                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 14.0\n                                                                                                              },\n                                                                                                              \"margin-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              },\n                                                                                                              \"padding-horizontal\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\"\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"flex-direction\": \"row\"\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"flex-grow\": 1.0,\n                                                                                                  \"flex-shrink\": 1.0,\n                                                                                                  \"overflow\": \"scroll\"\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"height\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 18.0\n                                                                                                                  },\n                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 18.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"border-all\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 24.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 24.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          },\n                                                                                                          \"justify-content\": \"center\",\n                                                                                                          \"padding-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"position-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 13.0\n                                                                                                      },\n                                                                                                      \"position-type\": \"absolute\"\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"align-items\": \"center\",\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"pct\",\n                                                                                                    \"value\": 100.0\n                                                                                                  },\n                                                                                                  \"justify-content\": \"center\",\n                                                                                                  \"position-right\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 16.0\n                                                                                                  },\n                                                                                                  \"position-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 0.0\n                                                                                                  },\n                                                                                                  \"position-type\": \"absolute\",\n                                                                                                  \"width\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 20.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"padding-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 11.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"margin-start\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 18.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"height\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 32.0\n                                                                                                      },\n                                                                                                      \"overflow\": \"hidden\",\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 32.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-end\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 8.0\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 1.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"node\": {\n                                                                                                              \"measure-funcs\": [\n                                                                                                                {\n                                                                                                                  \"duration-ns\": 7375,\n                                                                                                                  \"height\": null,\n                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                  \"output-height\": 36.0,\n                                                                                                                  \"output-width\": 152.0,\n                                                                                                                  \"width\": 200.0,\n                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                }\n                                                                                                              ]\n                                                                                                            },\n                                                                                                            \"style\": null\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex-shrink\": 1.0\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"flex-direction\": \"row\",\n                                                                                                      \"margin-end\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 20.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"node\": {\n                                                                                                              \"measure-funcs\": [\n                                                                                                                {\n                                                                                                                  \"duration-ns\": 7166,\n                                                                                                                  \"height\": null,\n                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                  \"output-height\": 32.0,\n                                                                                                                  \"output-width\": 220.0,\n                                                                                                                  \"width\": 220.0,\n                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                }\n                                                                                                              ]\n                                                                                                            },\n                                                                                                            \"style\": null\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"padding-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 4.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-direction\": \"row\"\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"node\": {\n                                                                                                      \"measure-funcs\": [\n                                                                                                        {\n                                                                                                          \"duration-ns\": 12292,\n                                                                                                          \"height\": 31.0,\n                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                          \"output-height\": 18.0,\n                                                                                                          \"output-width\": 64.0,\n                                                                                                          \"width\": 240.0,\n                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                        }\n                                                                                                      ]\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"margin-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 1.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"align-items\": \"center\",\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 32.0\n                                                                                                  },\n                                                                                                  \"justify-content\": \"center\",\n                                                                                                  \"margin-horizontal\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"min-width\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 52.0\n                                                                                                  },\n                                                                                                  \"padding-end\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 8.0\n                                                                                                  },\n                                                                                                  \"padding-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 8.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-direction\": \"row\",\n                                                                                              \"padding-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 14.0\n                                                                                                          },\n                                                                                                          \"overflow\": \"hidden\",\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 14.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"border-all\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 0.0\n                                                                                                      },\n                                                                                                      \"height\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 16.0\n                                                                                                      },\n                                                                                                      \"justify-content\": \"center\",\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 16.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"align-items\": \"center\",\n                                                                                                  \"border-all\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 0.0\n                                                                                                  },\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 16.0\n                                                                                                  },\n                                                                                                  \"justify-content\": \"center\",\n                                                                                                  \"padding-all\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 0.0\n                                                                                                  },\n                                                                                                  \"width\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 16.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"position-right\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              },\n                                                                                              \"position-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              },\n                                                                                              \"position-type\": \"absolute\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"padding-horizontal\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 12.0\n                                                                                      },\n                                                                                      \"padding-top\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 6.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"margin-top\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 1.0\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": null\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6625,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 87.5,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6625,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 133.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 9084,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 38.0,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6459,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 98.5,\n                                                                                                                              \"width\": 188.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6083,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 78.5,\n                                                                                                                                  \"width\": 188.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8917,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 78.0,\n                                                                                                                                  \"width\": 188.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 12.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 12.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": null\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-direction\": \"row-reverse\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"margin-start\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 8.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6333,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 102.0,\n                                                                                                                              \"width\": 186.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6083,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 78.5,\n                                                                                                                                  \"width\": 186.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8292,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 78.0,\n                                                                                                                                  \"width\": 186.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 14.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"width\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 14.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"margin-start\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 8.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6375,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 66.5,\n                                                                                                                              \"width\": 186.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6292,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 96.5,\n                                                                                                                                  \"width\": 186.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8292,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 79.5,\n                                                                                                                                  \"width\": 186.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 14.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"width\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 14.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"margin-start\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 8.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6833,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 74.5,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 5834,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 116.0,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8125,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 81.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6708,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 101.5,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6625,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 207.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                },\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 4791,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 128.5,\n                                                                                                                                  \"width\": 128.5,\n                                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8417,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 79.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 50.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 50.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6500,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 99.0,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 5917,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 141.0,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                },\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 4834,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 128.5,\n                                                                                                                                  \"width\": 128.5,\n                                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8291,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 79.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 50.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6542,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 83.0,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 5792,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 37.0,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8250,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 80.0,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"position-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-left\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-right\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-top\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"position-type\": \"absolute\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  },\n                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 34.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 36.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 50.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 50.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 6458,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 18.0,\n                                                                                                                              \"output-width\": 82.0,\n                                                                                                                              \"width\": 208.0,\n                                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-self\": \"flex-start\",\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 5.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 6541,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 204.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                },\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 4542,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 127.5,\n                                                                                                                                  \"width\": 127.5,\n                                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 8333,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 16.0,\n                                                                                                                                  \"output-width\": 80.5,\n                                                                                                                                  \"width\": 208.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-horizontal\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 10.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex\": 1.0,\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"center\"\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          },\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"flex\": 1.0\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"flex-shrink\": 1.0,\n                                                                      \"overflow\": \"scroll\"\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"flex\": 1.0\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": {\n                                                      \"flex\": 1.0\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"flex\": 1.0\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 310.0\n                                              }\n                                            }\n                                          },\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"height\": {\n                                                    \"unit\": \"pct\",\n                                                    \"value\": 100.0\n                                                  },\n                                                  \"width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 1.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"margin-horizontal\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -1.0\n                                              },\n                                              \"min-width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 10.0\n                                              },\n                                              \"position-bottom\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"position-left\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 380.0\n                                              },\n                                              \"position-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"position-type\": \"absolute\",\n                                              \"width\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 10.0\n                                              }\n                                            }\n                                          },\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"position-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-left\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-right\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-type\": \"absolute\"\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"position-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-right\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-type\": \"absolute\"\n                                                        }\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"node\": {\n                                                                  \"measure-funcs\": [\n                                                                    {\n                                                                      \"duration-ns\": 6584,\n                                                                      \"height\": 768.0,\n                                                                      \"height-mode\": \"at-most\",\n                                                                      \"output-height\": 20.0,\n                                                                      \"output-width\": 119.0,\n                                                                      \"width\": 644.0,\n                                                                      \"width-mode\": \"at-most\"\n                                                                    }\n                                                                  ]\n                                                                },\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0,\n                                                              \"height\": {\n                                                                \"unit\": \"pct\",\n                                                                \"value\": 100.0\n                                                              },\n                                                              \"justify-content\": \"center\",\n                                                              \"position-left\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-type\": \"absolute\",\n                                                              \"width\": {\n                                                                \"unit\": \"pct\",\n                                                                \"value\": 100.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"position-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-left\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-top\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-type\": \"absolute\"\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"height\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 32.0\n                                                                                                      },\n                                                                                                      \"justify-content\": \"center\",\n                                                                                                      \"overflow\": \"hidden\",\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 32.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 6750,\n                                                                                                  \"height\": 20.0,\n                                                                                                  \"height-mode\": \"at-most\",\n                                                                                                  \"output-height\": 18.0,\n                                                                                                  \"output-width\": 423.0,\n                                                                                                  \"width\": 423.0,\n                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"max-height\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 20.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 6500,\n                                                                                                  \"height\": 47.0,\n                                                                                                  \"height-mode\": \"at-most\",\n                                                                                                  \"output-height\": 16.0,\n                                                                                                  \"output-width\": 423.0,\n                                                                                                  \"width\": 423.0,\n                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"margin-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex\": 1.0,\n                                                                                          \"margin-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 10.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"align-items\": \"center\",\n                                                                                      \"flex-direction\": \"row\"\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"align-items\": \"center\",\n                                                                                  \"flex\": 1.0,\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"padding-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 28.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 28.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"align-items\": \"center\",\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 36.0\n                                                                                      },\n                                                                                      \"justify-content\": \"center\",\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 36.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"height\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 28.0\n                                                                                              },\n                                                                                              \"overflow\": \"hidden\",\n                                                                                              \"width\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 28.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-items\": \"center\",\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 36.0\n                                                                                          },\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 36.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"flex-direction\": \"row\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 28.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 28.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"align-items\": \"center\",\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 36.0\n                                                                                      },\n                                                                                      \"justify-content\": \"center\",\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 36.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 28.0\n                                                                                                  },\n                                                                                                  \"overflow\": \"hidden\",\n                                                                                                  \"width\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 28.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-items\": \"center\",\n                                                                                              \"border-all\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              },\n                                                                                              \"height\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 36.0\n                                                                                              },\n                                                                                              \"justify-content\": \"center\",\n                                                                                              \"width\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 36.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-items\": \"center\",\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 36.0\n                                                                                          },\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"margin-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 4.0\n                                                                                          },\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 36.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"align-items\": \"center\",\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"pct\",\n                                                                                    \"value\": 100.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"align-content\": \"flex-end\",\n                                                                              \"flex\": 1.0,\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 48.0\n                                                                              },\n                                                                              \"margin-top\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": -5.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"flex\": 1.0\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"flex-direction\": \"row\",\n                                                                  \"margin-start\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 5.0\n                                                                  },\n                                                                  \"padding-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 26.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 1.0\n                                                                  },\n                                                                  \"position-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"position-left\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"position-right\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"position-type\": \"absolute\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex-direction\": \"row\",\n                                                              \"min-height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 74.0\n                                                              },\n                                                              \"padding-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.0\n                                                              },\n                                                              \"padding-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 4.0\n                                                              },\n                                                              \"position-left\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-right\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"position-type\": \"absolute\"\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 39.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"margin-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 2.0\n                                                                                                          },\n                                                                                                          \"padding-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 3.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"node\": {\n                                                                                                          \"measure-funcs\": [\n                                                                                                            {\n                                                                                                              \"duration-ns\": 7167,\n                                                                                                              \"height\": null,\n                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                              \"output-height\": 14.0,\n                                                                                                              \"output-width\": 107.5,\n                                                                                                              \"width\": 605.0,\n                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                            }\n                                                                                                          ]\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"flex-direction\": \"row\"\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"node\": {\n                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                        {\n                                                                                                                                          \"duration-ns\": 8167,\n                                                                                                                                          \"height\": null,\n                                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                                          \"output-height\": 16.0,\n                                                                                                                                          \"output-width\": 239.0,\n                                                                                                                                          \"width\": 345.0,\n                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                        }\n                                                                                                                                      ]\n                                                                                                                                    },\n                                                                                                                                    \"style\": null\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"margin-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -19.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 24.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 6.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 8.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7042,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 110.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 11958,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-self\": \"flex-end\",\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"margin-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": null\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 8291,\n                                                                                                  \"height\": null,\n                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                  \"output-height\": 14.0,\n                                                                                                  \"output-width\": 77.0,\n                                                                                                  \"width\": 629.0,\n                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-wrap\": \"wrap\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-self\": \"stretch\",\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 5.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 21.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 7667,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4791,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7084,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 266.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"max-height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 280.0\n                                                                                                                                          },\n                                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 100.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"max-height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 280.0\n                                                                                                                                      },\n                                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"max-height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"max-width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-self\": \"flex-end\",\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"margin-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 23.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 7208,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 5833,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                                      \"margin-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                                      \"margin-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 33.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                                      \"margin-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-wrap\": \"wrap\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"margin-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"max-height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 280.0\n                                                                                                                                          },\n                                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 100.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"max-height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 280.0\n                                                                                                                                      },\n                                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"max-height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"max-width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 7250,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"padding-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          },\n                                                                                                          \"position-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 15.0\n                                                                                                          },\n                                                                                                          \"position-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-type\": \"absolute\"\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 10833,\n                                                                                                  \"height\": null,\n                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                  \"output-height\": 14.0,\n                                                                                                  \"output-width\": 82.5,\n                                                                                                  \"width\": 629.0,\n                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-wrap\": \"wrap\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-self\": \"stretch\",\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 5.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 39.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6791,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4917,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 9167,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 273.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 7334,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-self\": \"flex-end\",\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"margin-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 23.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6792,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 48.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 5000,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7208,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 36.0,\n                                                                                                                                                  \"output-width\": 319.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 7583,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"margin-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 2.0\n                                                                                                          },\n                                                                                                          \"padding-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 3.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"node\": {\n                                                                                                          \"measure-funcs\": [\n                                                                                                            {\n                                                                                                              \"duration-ns\": 11291,\n                                                                                                              \"height\": null,\n                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                              \"output-height\": 14.0,\n                                                                                                              \"output-width\": 130.0,\n                                                                                                              \"width\": 605.0,\n                                                                                                              \"width-mode\": \"at-most\"\n                                                                                                            }\n                                                                                                          ]\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"flex-direction\": \"row\"\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"node\": {\n                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                        {\n                                                                                                                                          \"duration-ns\": 8000,\n                                                                                                                                          \"height\": null,\n                                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                                          \"output-height\": 32.0,\n                                                                                                                                          \"output-width\": 345.0,\n                                                                                                                                          \"width\": 345.0,\n                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                        },\n                                                                                                                                        {\n                                                                                                                                          \"duration-ns\": 4542,\n                                                                                                                                          \"height\": null,\n                                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                                          \"output-height\": 32.0,\n                                                                                                                                          \"output-width\": 319.5,\n                                                                                                                                          \"width\": 321.0,\n                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                        }\n                                                                                                                                      ]\n                                                                                                                                    },\n                                                                                                                                    \"style\": null\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"margin-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -19.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 24.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 12.0\n                                                                                                                              },\n                                                                                                                              \"padding-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 6.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 8.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 6542,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 331.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 4417,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 321.0,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 7083,\n                                                                                                  \"height\": null,\n                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                  \"output-height\": 14.0,\n                                                                                                  \"output-width\": 74.5,\n                                                                                                  \"width\": 629.0,\n                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-wrap\": \"wrap\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-self\": \"stretch\",\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 5.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6458,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 3959,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 50.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"children\": [\n                                                                                                                                                      {\n                                                                                                                                                        \"config\": {\n                                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                                        },\n                                                                                                                                                        \"style\": {\n                                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                                          \"width\": {\n                                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                                            \"value\": 100.0\n                                                                                                                                                          }\n                                                                                                                                                        }\n                                                                                                                                                      }\n                                                                                                                                                    ],\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"flex\": 1.0,\n                                                                                                                                                      \"width\": {\n                                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                                        \"value\": 100.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  },\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                                    \"value\": 100.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 1.0\n                                                                                                                                              },\n                                                                                                                                              \"flex\": 1.0,\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 200.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                                \"value\": 100.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"flex\": 1.0,\n                                                                                                                                          \"margin-end\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 50.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                                      \"margin-bottom\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-wrap\": \"wrap\",\n                                                                                                                                  \"width\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"margin-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\"\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 16667,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 105.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"max-height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 280.0\n                                                                                                                                          },\n                                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 100.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"max-height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 280.0\n                                                                                                                                      },\n                                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"max-height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"max-width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7542,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 345.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 4792,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 321.0,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6500,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4042,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 12875,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 338.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 5458,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 72.0,\n                                                                                                                                                  \"output-width\": 305.5,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 6958,\n                                                                                                  \"height\": null,\n                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                  \"output-height\": 14.0,\n                                                                                                  \"output-width\": 74.5,\n                                                                                                  \"width\": 629.0,\n                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-wrap\": \"wrap\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-self\": \"stretch\",\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 5.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 39.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6292,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 22.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6208,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 6958,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 292.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 14125,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"position-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-right\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"align-items\": \"center\",\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          },\n                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"align-self\": \"flex-end\",\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"margin-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": [\n                                                                                                {\n                                                                                                  \"duration-ns\": 15417,\n                                                                                                  \"height\": null,\n                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                  \"output-height\": 14.0,\n                                                                                                  \"output-width\": 70.0,\n                                                                                                  \"width\": 629.0,\n                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                }\n                                                                                              ]\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-wrap\": \"wrap\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"align-self\": \"stretch\",\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"center\",\n                                                                                          \"padding-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 5.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6833,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4083,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 8250,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 90.0,\n                                                                                                                                                  \"output-width\": 345.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 4708,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 90.0,\n                                                                                                                                                  \"output-width\": 318.0,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 12708,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 3958,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7208,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 36.0,\n                                                                                                                                                  \"output-width\": 334.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 4500,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 54.0,\n                                                                                                                                                  \"output-width\": 278.5,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 23.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6292,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 48.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4041,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 10667,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 332.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 4416,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 36.0,\n                                                                                                                                                  \"output-width\": 316.0,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"children\": [\n                                                                                                                                                  {\n                                                                                                                                                    \"config\": {\n                                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                                    },\n                                                                                                                                                    \"node\": {\n                                                                                                                                                      \"measure-funcs\": [\n                                                                                                                                                        {\n                                                                                                                                                          \"duration-ns\": 6834,\n                                                                                                                                                          \"height\": 15.0,\n                                                                                                                                                          \"height-mode\": \"at-most\",\n                                                                                                                                                          \"output-height\": 15.0,\n                                                                                                                                                          \"output-width\": 13.0,\n                                                                                                                                                          \"width\": 14.0,\n                                                                                                                                                          \"width-mode\": \"at-most\"\n                                                                                                                                                        }\n                                                                                                                                                      ]\n                                                                                                                                                    },\n                                                                                                                                                    \"style\": {\n                                                                                                                                                      \"margin-top\": {\n                                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                                        \"value\": -1.0\n                                                                                                                                                      }\n                                                                                                                                                    }\n                                                                                                                                                  }\n                                                                                                                                                ],\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  },\n                                                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 14.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"margin-start\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"flex-direction\": \"row\"\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"border-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 2.0\n                                                                                                                              },\n                                                                                                                              \"margin-end\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -5.0\n                                                                                                                              },\n                                                                                                                              \"padding-horizontal\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 4.0\n                                                                                                                              },\n                                                                                                                              \"padding-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 3.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"flex-end\"\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6458,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 21.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 3917,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 7500,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 126.0,\n                                                                                                                                                  \"output-width\": 345.0,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                },\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 5000,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 126.0,\n                                                                                                                                                  \"output-width\": 319.5,\n                                                                                                                                                  \"width\": 321.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"align-items\": \"center\",\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              },\n                                                                                                              \"justify-content\": \"center\",\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 28.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"align-self\": \"flex-end\",\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 1.0\n                                                                                              },\n                                                                                              \"padding-end\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0,\n                                                                                                  \"flex-direction\": \"row\",\n                                                                                                  \"margin-end\": \"auto\",\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 10.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 6666,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 48.0,\n                                                                                                      \"width\": 603.0,\n                                                                                                      \"width-mode\": \"at-most\"\n                                                                                                    },\n                                                                                                    {\n                                                                                                      \"duration-ns\": 4583,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 14.0,\n                                                                                                      \"output-width\": 563.0,\n                                                                                                      \"width\": 563.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 2.0\n                                                                                                  },\n                                                                                                  \"margin-start\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 12.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"node\": {\n                                                                                                                                              \"measure-funcs\": [\n                                                                                                                                                {\n                                                                                                                                                  \"duration-ns\": 6958,\n                                                                                                                                                  \"height\": null,\n                                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                                  \"output-height\": 18.0,\n                                                                                                                                                  \"output-width\": 229.5,\n                                                                                                                                                  \"width\": 345.0,\n                                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                                }\n                                                                                                                                              ]\n                                                                                                                                            },\n                                                                                                                                            \"style\": null\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": null\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-self\": \"center\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"border-all\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 0.0\n                                                                                                                                  },\n                                                                                                                                  \"margin-end\": \"auto\",\n                                                                                                                                  \"margin-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 1.0\n                                                                                                                                  },\n                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                  \"padding-horizontal\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 12.0\n                                                                                                                                  },\n                                                                                                                                  \"padding-vertical\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": 8.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              },\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"position-bottom\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-left\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-right\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-top\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                                            }\n                                                                                                                                          },\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 4.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"children\": [\n                                                                                                                                              {\n                                                                                                                                                \"config\": {\n                                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                                },\n                                                                                                                                                \"style\": {\n                                                                                                                                                  \"height\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  },\n                                                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                                                  \"width\": {\n                                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                                    \"value\": 24.0\n                                                                                                                                                  }\n                                                                                                                                                }\n                                                                                                                                              }\n                                                                                                                                            ],\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"align-items\": \"center\",\n                                                                                                                                              \"border-all\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 0.0\n                                                                                                                                              },\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              },\n                                                                                                                                              \"justify-content\": \"center\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 32.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"margin-horizontal\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"margin-vertical\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 3.0\n                                                                                                                                          },\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"flex-direction\": \"row\"\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"align-items\": \"center\",\n                                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                                  \"height\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-left\": {\n                                                                                                                                    \"unit\": \"pct\",\n                                                                                                                                    \"value\": 100.0\n                                                                                                                                  },\n                                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"max-height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 280.0\n                                                                                                                                          },\n                                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"pct\",\n                                                                                                                                            \"value\": 100.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"max-height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 280.0\n                                                                                                                                      },\n                                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"pct\",\n                                                                                                                                        \"value\": 100.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": null\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"margin-end\": \"auto\",\n                                                                                                                              \"margin-vertical\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 1.0\n                                                                                                                              },\n                                                                                                                              \"max-height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"max-width\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                              \"padding-all\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": 0.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          },\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"children\": [\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"position-bottom\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-left\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-right\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-top\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"position-type\": \"absolute\"\n                                                                                                                                        }\n                                                                                                                                      },\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 4.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  },\n                                                                                                                                  {\n                                                                                                                                    \"children\": [\n                                                                                                                                      {\n                                                                                                                                        \"children\": [\n                                                                                                                                          {\n                                                                                                                                            \"config\": {\n                                                                                                                                              \"errata\": \"all\"\n                                                                                                                                            },\n                                                                                                                                            \"style\": {\n                                                                                                                                              \"height\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              },\n                                                                                                                                              \"overflow\": \"hidden\",\n                                                                                                                                              \"width\": {\n                                                                                                                                                \"unit\": \"px\",\n                                                                                                                                                \"value\": 24.0\n                                                                                                                                              }\n                                                                                                                                            }\n                                                                                                                                          }\n                                                                                                                                        ],\n                                                                                                                                        \"config\": {\n                                                                                                                                          \"errata\": \"all\"\n                                                                                                                                        },\n                                                                                                                                        \"style\": {\n                                                                                                                                          \"align-items\": \"center\",\n                                                                                                                                          \"border-all\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 0.0\n                                                                                                                                          },\n                                                                                                                                          \"height\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          },\n                                                                                                                                          \"justify-content\": \"center\",\n                                                                                                                                          \"width\": {\n                                                                                                                                            \"unit\": \"px\",\n                                                                                                                                            \"value\": 32.0\n                                                                                                                                          }\n                                                                                                                                        }\n                                                                                                                                      }\n                                                                                                                                    ],\n                                                                                                                                    \"config\": {\n                                                                                                                                      \"errata\": \"all\"\n                                                                                                                                    },\n                                                                                                                                    \"style\": {\n                                                                                                                                      \"align-items\": \"center\",\n                                                                                                                                      \"border-all\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"height\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      },\n                                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                                      \"margin-horizontal\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 0.0\n                                                                                                                                      },\n                                                                                                                                      \"margin-vertical\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 3.0\n                                                                                                                                      },\n                                                                                                                                      \"width\": {\n                                                                                                                                        \"unit\": \"px\",\n                                                                                                                                        \"value\": 32.0\n                                                                                                                                      }\n                                                                                                                                    }\n                                                                                                                                  }\n                                                                                                                                ],\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\"\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\"\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"align-items\": \"center\",\n                                                                                                                              \"flex-direction\": \"row\",\n                                                                                                                              \"height\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-left\": {\n                                                                                                                                \"unit\": \"pct\",\n                                                                                                                                \"value\": 100.0\n                                                                                                                              },\n                                                                                                                              \"position-type\": \"absolute\"\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\"\n                                                                                                                        },\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\"\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-self\": \"flex-start\",\n                                                                                                                      \"min-width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"relative\"\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\"\n                                                                                                                },\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"pct\",\n                                                                                                                    \"value\": 100.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\"\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"max-width\": {\n                                                                                                                \"unit\": \"pct\",\n                                                                                                                \"value\": 60.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 0.0,\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"position-type\": \"relative\"\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"padding-horizontal\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          },\n                                                                                          \"padding-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 6.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": null\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\"\n                                                                                                        },\n                                                                                                        \"style\": {\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          },\n                                                                                                          \"justify-content\": \"center\",\n                                                                                                          \"overflow\": \"hidden\",\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\"\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"justify-content\": \"center\",\n                                                                                                      \"padding-all\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 4.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\"\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 32.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\"\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 6.0\n                                                                                              },\n                                                                                              \"margin-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 40.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\"\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"padding-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 46.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"flex-grow\": 1.0\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"flex-shrink\": 1.0,\n                                                                              \"height\": {\n                                                                                \"unit\": \"pct\",\n                                                                                \"value\": 100.0\n                                                                              },\n                                                                              \"margin-top\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 0.0\n                                                                              },\n                                                                              \"overflow\": \"scroll\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": null\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 28.0\n                                                                                      },\n                                                                                      \"overflow\": \"hidden\",\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 28.0\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"align-items\": \"center\",\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 36.0\n                                                                                  },\n                                                                                  \"justify-content\": \"center\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 36.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"align-items\": \"center\",\n                                                                              \"border-all\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 1.0\n                                                                              },\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 36.0\n                                                                              },\n                                                                              \"justify-content\": \"center\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 36.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"align-self\": \"center\",\n                                                                          \"position-bottom\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 15.0\n                                                                          },\n                                                                          \"position-type\": \"absolute\"\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"flex\": 1.0,\n                                                                      \"margin-start\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 5.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"flex\": 1.0\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"flex\": 1.0\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              },\n                                                                              \"overflow\": \"hidden\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 28.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"align-items\": \"center\",\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 32.0\n                                                                          },\n                                                                          \"justify-content\": \"center\",\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 32.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 36.0\n                                                                  },\n                                                                  \"justify-content\": \"center\",\n                                                                  \"margin-start\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 17.0\n                                                                  },\n                                                                  \"padding-end\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 17.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 32.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"margin-start\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 8.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"flex-direction\": \"row\"\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"flex-shrink\": 1.0,\n                                                                      \"overflow\": \"scroll\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"node\": {\n                                                                                      \"measure-funcs\": [\n                                                                                        {\n                                                                                          \"duration-ns\": 6000,\n                                                                                          \"height\": 189.0,\n                                                                                          \"height-mode\": \"at-most\",\n                                                                                          \"output-height\": 18.0,\n                                                                                          \"output-width\": 442.0,\n                                                                                          \"width\": 442.0,\n                                                                                          \"width-mode\": \"exactly\"\n                                                                                        }\n                                                                                      ]\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"border-all\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 0.0\n                                                                                      },\n                                                                                      \"max-height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 200.0\n                                                                                      },\n                                                                                      \"padding-horizontal\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 10.0\n                                                                                      },\n                                                                                      \"padding-top\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 5.0\n                                                                                      },\n                                                                                      \"padding-vertical\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 6.0\n                                                                                      },\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"pct\",\n                                                                                        \"value\": 100.0\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"width\": {\n                                                                                \"unit\": \"pct\",\n                                                                                \"value\": 100.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"flex\": 1.0,\n                                                                          \"flex-direction\": \"row\",\n                                                                          \"padding-start\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 1.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 28.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 28.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"align-items\": \"center\",\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 32.0\n                                                                              },\n                                                                              \"justify-content\": \"center\",\n                                                                              \"width\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 32.0\n                                                                              }\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"position-bottom\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 0.0\n                                                                                      },\n                                                                                      \"position-left\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 0.0\n                                                                                      },\n                                                                                      \"position-right\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 0.0\n                                                                                      },\n                                                                                      \"position-top\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 0.0\n                                                                                      },\n                                                                                      \"position-type\": \"absolute\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 28.0\n                                                                                      },\n                                                                                      \"overflow\": \"hidden\",\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 28.0\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"align-items\": \"center\",\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 32.0\n                                                                                  },\n                                                                                  \"justify-content\": \"center\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 3.0\n                                                                                  },\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 32.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": {\n                                                                              \"align-items\": \"center\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"align-items\": \"center\",\n                                                                          \"align-self\": \"flex-end\",\n                                                                          \"flex-direction\": \"row\",\n                                                                          \"margin-start\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 8.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"align-items\": \"center\",\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"margin-vertical\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 2.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"border-all\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  },\n                                                                  \"flex\": 1.0,\n                                                                  \"margin-end\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 10.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 32.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\"\n                                                                                    },\n                                                                                    \"node\": {\n                                                                                      \"measure-funcs\": [\n                                                                                        {\n                                                                                          \"duration-ns\": 7916,\n                                                                                          \"height\": 32.0,\n                                                                                          \"height-mode\": \"at-most\",\n                                                                                          \"output-height\": 25.0,\n                                                                                          \"output-width\": 20.0,\n                                                                                          \"width\": 30.5,\n                                                                                          \"width-mode\": \"at-most\"\n                                                                                        }\n                                                                                      ]\n                                                                                    },\n                                                                                    \"style\": {\n                                                                                      \"padding-left\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 1.5\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\"\n                                                                                },\n                                                                                \"style\": {\n                                                                                  \"align-items\": \"center\",\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 32.0\n                                                                                  },\n                                                                                  \"justify-content\": \"center\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 32.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\"\n                                                                            },\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\"\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"position-type\": \"absolute\"\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\"\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      },\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\"\n                                                                },\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 36.0\n                                                                  },\n                                                                  \"justify-content\": \"center\",\n                                                                  \"margin-left\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 4.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 32.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": {\n                                                              \"align-items\": \"flex-end\",\n                                                              \"flex-direction\": \"row\",\n                                                              \"padding-end\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 10.0\n                                                              },\n                                                              \"padding-vertical\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 10.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\"\n                                                            },\n                                                            \"style\": null\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"flex\": 1.0\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": {\n                                                      \"flex\": 1.0\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"flex\": 1.0\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"flex-grow\": 1.0,\n                                              \"flex-shrink\": 1.0\n                                            }\n                                          },\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\"\n                                                        },\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 22.0\n                                                          },\n                                                          \"overflow\": \"hidden\",\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 22.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\"\n                                                    },\n                                                    \"style\": {\n                                                      \"align-items\": \"center\",\n                                                      \"justify-content\": \"center\"\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\"\n                                                },\n                                                \"style\": {\n                                                  \"height\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 28.0\n                                                  },\n                                                  \"position-top\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 4.0\n                                                  },\n                                                  \"width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 28.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"style\": {\n                                              \"flex-direction\": \"row\",\n                                              \"justify-content\": \"center\",\n                                              \"position-end\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 40.0\n                                              },\n                                              \"position-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 5.0\n                                              },\n                                              \"position-type\": \"absolute\"\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": {\n                                          \"flex-direction\": \"row\",\n                                          \"height\": {\n                                            \"unit\": \"pct\",\n                                            \"value\": 100.0\n                                          },\n                                          \"width\": {\n                                            \"unit\": \"pct\",\n                                            \"value\": 100.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": {\n                                      \"flex\": 1.0\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"flex\": 1.0\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"flex-grow\": 1.0,\n                              \"position-type\": \"relative\"\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"flex\": 1.0\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\"\n                    },\n                    \"style\": {\n                      \"flex\": 1.0\n                    }\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"style\": {\n                  \"flex\": 1.0\n                }\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\"\n            },\n            \"style\": {\n              \"flex\": 1.0\n            }\n          },\n          {\n            \"children\": [\n              {\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"node\": {\n                  \"measure-funcs\": [\n                    {\n                      \"duration-ns\": 7125,\n                      \"height\": null,\n                      \"height-mode\": \"undefined\",\n                      \"output-height\": 7.0,\n                      \"output-width\": 70.5,\n                      \"width\": 1020.0,\n                      \"width-mode\": \"at-most\"\n                    }\n                  ]\n                },\n                \"style\": null\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\"\n            },\n            \"style\": {\n              \"align-items\": \"center\",\n              \"justify-content\": \"center\",\n              \"padding-all\": {\n                \"unit\": \"px\",\n                \"value\": 2.0\n              },\n              \"position-bottom\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-right\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-type\": \"absolute\"\n            }\n          }\n        ],\n        \"config\": {\n          \"errata\": \"all\"\n        },\n        \"style\": {\n          \"flex\": 1.0\n        }\n      }\n    ],\n    \"config\": {\n      \"errata\": \"all\",\n      \"point-scale-factor\": 2.0\n    },\n    \"style\": {\n      \"max-height\": {\n        \"unit\": \"px\",\n        \"value\": 768.0\n      },\n      \"max-width\": {\n        \"unit\": \"px\",\n        \"value\": 1024.0\n      },\n      \"min-height\": {\n        \"unit\": \"px\",\n        \"value\": 768.0\n      },\n      \"min-width\": {\n        \"unit\": \"px\",\n        \"value\": 1024.0\n      }\n    }\n  }\n}"
  },
  {
    "path": "benchmark/captures/feed-android.json",
    "content": "{\n  \"layout-inputs\": {\n    \"available-height\": 604.3333129882813,\n    \"available-width\": 360.0,\n    \"owner-direction\": \"ltr\"\n  },\n  \"tree\": {\n    \"children\": [\n      {\n        \"children\": [\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"children\": [\n                                  {\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": {\n                                      \"measure-funcs\": [\n                                        {\n                                          \"duration-ns\": 30104,\n                                          \"height\": 586.0,\n                                          \"height-mode\": \"at-most\",\n                                          \"output-height\": 17.66666603088379,\n                                          \"output-width\": 24.33333396911621,\n                                          \"width\": null,\n                                          \"width-mode\": \"undefined\"\n                                        }\n                                      ]\n                                    },\n                                    \"style\": {\n                                      \"flex-shrink\": 1.0,\n                                      \"margin-bottom\": {\n                                        \"unit\": \"px\",\n                                        \"value\": -4.333333492279053\n                                      },\n                                      \"margin-top\": {\n                                        \"unit\": \"px\",\n                                        \"value\": -3.3333332538604736\n                                      },\n                                      \"padding-vertical\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 8.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"align-items\": \"center\",\n                                  \"flex-direction\": \"row\",\n                                  \"justify-content\": \"center\",\n                                  \"margin-left\": {\n                                    \"unit\": \"px\",\n                                    \"value\": -12.0\n                                  },\n                                  \"min-height\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 36.0\n                                  },\n                                  \"min-width\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 44.0\n                                  },\n                                  \"padding-horizontal\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 12.0\n                                  }\n                                }\n                              },\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"height\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 29.0\n                                  },\n                                  \"width\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 1.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8385,\n                                                  \"height\": 586.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 17.66666603088379,\n                                                  \"output-width\": 50.33333206176758,\n                                                  \"width\": null,\n                                                  \"width-mode\": \"undefined\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"flex-shrink\": 1.0,\n                                              \"margin-bottom\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -4.333333492279053\n                                              },\n                                              \"margin-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -3.3333332538604736\n                                              },\n                                              \"padding-vertical\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"align-items\": \"center\",\n                                          \"flex-direction\": \"row\",\n                                          \"justify-content\": \"center\",\n                                          \"margin-end\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 4.0\n                                          },\n                                          \"min-height\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 36.0\n                                          },\n                                          \"min-width\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 44.0\n                                          },\n                                          \"padding-horizontal\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 12.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"align-items\": \"flex-start\",\n                                      \"justify-content\": \"center\"\n                                    }\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 7136,\n                                                  \"height\": 586.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 17.66666603088379,\n                                                  \"output-width\": 36.33333206176758,\n                                                  \"width\": null,\n                                                  \"width-mode\": \"undefined\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"flex-shrink\": 1.0,\n                                              \"margin-bottom\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -4.333333492279053\n                                              },\n                                              \"margin-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": -3.3333332538604736\n                                              },\n                                              \"padding-vertical\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"align-items\": \"center\",\n                                          \"flex-direction\": \"row\",\n                                          \"justify-content\": \"center\",\n                                          \"min-height\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 36.0\n                                          },\n                                          \"min-width\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 44.0\n                                          },\n                                          \"padding-horizontal\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 12.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"align-items\": \"flex-start\",\n                                      \"justify-content\": \"center\"\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"flex-direction\": \"row\",\n                                  \"padding-left\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 16.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": {\n                                      \"measure-funcs\": [\n                                        {\n                                          \"duration-ns\": 8073,\n                                          \"height\": 586.0,\n                                          \"height-mode\": \"at-most\",\n                                          \"output-height\": 17.66666603088379,\n                                          \"output-width\": 35.0,\n                                          \"width\": null,\n                                          \"width-mode\": \"undefined\"\n                                        }\n                                      ]\n                                    },\n                                    \"style\": {\n                                      \"flex-shrink\": 1.0,\n                                      \"margin-bottom\": {\n                                        \"unit\": \"px\",\n                                        \"value\": -4.333333492279053\n                                      },\n                                      \"margin-top\": {\n                                        \"unit\": \"px\",\n                                        \"value\": -3.3333332538604736\n                                      },\n                                      \"padding-vertical\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 8.0\n                                      }\n                                    }\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"height\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 16.0\n                                          },\n                                          \"overflow\": \"hidden\",\n                                          \"width\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 16.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"margin-start\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 6.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"align-items\": \"center\",\n                                  \"flex-direction\": \"row\",\n                                  \"justify-content\": \"center\",\n                                  \"min-height\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 36.0\n                                  },\n                                  \"min-width\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 44.0\n                                  },\n                                  \"padding-horizontal\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 12.0\n                                  }\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\",\n                              \"point-scale-factor\": 3.0\n                            },\n                            \"node\": null,\n                            \"style\": {\n                              \"align-items\": \"center\",\n                              \"flex-direction\": \"row\",\n                              \"padding-bottom\": {\n                                \"unit\": \"px\",\n                                \"value\": 8.0\n                              },\n                              \"padding-left\": {\n                                \"unit\": \"px\",\n                                \"value\": 16.0\n                              },\n                              \"padding-top\": {\n                                \"unit\": \"px\",\n                                \"value\": 2.0\n                              }\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\",\n                          \"point-scale-factor\": 3.0\n                        },\n                        \"node\": null,\n                        \"style\": {\n                          \"flex-direction\": \"row\"\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": null,\n                    \"style\": {\n                      \"flex-direction\": \"row\",\n                      \"flex-shrink\": 1.0,\n                      \"overflow\": \"scroll\"\n                    }\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"children\": [\n                                  {\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"position-top\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 0.0\n                                      },\n                                      \"position-type\": \"absolute\"\n                                    }\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": null\n                                              },\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": {\n                                                                  \"measure-funcs\": [\n                                                                    {\n                                                                      \"duration-ns\": 8490,\n                                                                      \"height\": null,\n                                                                      \"height-mode\": \"undefined\",\n                                                                      \"output-height\": 19.66666603088379,\n                                                                      \"output-width\": 102.33333587646484,\n                                                                      \"width\": 312.0,\n                                                                      \"width-mode\": \"at-most\"\n                                                                    }\n                                                                  ]\n                                                                },\n                                                                \"style\": {\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": -4.333333492279053\n                                                                  },\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": -4.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"flex\": 0.0,\n                                                              \"margin-right\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 16.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"height\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 16.0\n                                                                          },\n                                                                          \"overflow\": \"hidden\",\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 16.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 2.0\n                                                                      },\n                                                                      \"margin-right\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 1.5\n                                                                      }\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": {\n                                                                          \"measure-funcs\": [\n                                                                            {\n                                                                              \"duration-ns\": 8229,\n                                                                              \"height\": null,\n                                                                              \"height-mode\": \"undefined\",\n                                                                              \"output-height\": 17.66666603088379,\n                                                                              \"output-width\": 142.3333282470703,\n                                                                              \"width\": 209.66665649414063,\n                                                                              \"width-mode\": \"at-most\"\n                                                                            },\n                                                                            {\n                                                                              \"duration-ns\": 4375,\n                                                                              \"height\": null,\n                                                                              \"height-mode\": \"undefined\",\n                                                                              \"output-height\": 17.66666603088379,\n                                                                              \"output-width\": 133.0,\n                                                                              \"width\": 133.0,\n                                                                              \"width-mode\": \"exactly\"\n                                                                            }\n                                                                          ]\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"margin-bottom\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -4.333333492279053\n                                                                          },\n                                                                          \"margin-top\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -3.3333332538604736\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-shrink\": 1.0,\n                                                                      \"padding-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 0.0\n                                                                      }\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": {\n                                                                          \"measure-funcs\": [\n                                                                            {\n                                                                              \"duration-ns\": 7813,\n                                                                              \"height\": null,\n                                                                              \"height-mode\": \"undefined\",\n                                                                              \"output-height\": 17.66666603088379,\n                                                                              \"output-width\": 11.333333015441895,\n                                                                              \"width\": 209.66665649414063,\n                                                                              \"width-mode\": \"at-most\"\n                                                                            }\n                                                                          ]\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"margin-bottom\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -4.333333492279053\n                                                                          },\n                                                                          \"margin-top\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -3.3333332538604736\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"padding-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 0.0\n                                                                      }\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": {\n                                                                          \"measure-funcs\": [\n                                                                            {\n                                                                              \"duration-ns\": 7239,\n                                                                              \"height\": null,\n                                                                              \"height-mode\": \"undefined\",\n                                                                              \"output-height\": 17.66666603088379,\n                                                                              \"output-width\": 45.33333206176758,\n                                                                              \"width\": 209.66665649414063,\n                                                                              \"width-mode\": \"at-most\"\n                                                                            }\n                                                                          ]\n                                                                        },\n                                                                        \"style\": {\n                                                                          \"margin-bottom\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -4.333333492279053\n                                                                          },\n                                                                          \"margin-top\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": -3.3333332538604736\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"padding-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 0.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"flex-direction\": \"row\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"flex-end\",\n                                                              \"flex-grow\": 1.0,\n                                                              \"flex-shrink\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"align-items\": \"center\",\n                                                          \"flex-direction\": \"row\",\n                                                          \"padding-horizontal\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"padding-vertical\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 12.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 27604,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 17969,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 32448,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 13906,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 17136,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 13854,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 17187,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 14791,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 16302,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 20573,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 14063,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 12396,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 13125,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 14271,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 15573,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 22917,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 15052,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 17709,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 11459,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 16041,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 16563,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 15625,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  },\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 22968,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"overflow\": \"hidden\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"border-all\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 1.0\n                                                                                  },\n                                                                                  \"height\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  },\n                                                                                  \"position-bottom\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-left\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-right\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-top\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"position-type\": \"absolute\",\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"overflow\": \"hidden\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": {\n                                                                                          \"measure-funcs\": [\n                                                                                            {\n                                                                                              \"duration-ns\": 17031,\n                                                                                              \"height\": null,\n                                                                                              \"height-mode\": \"undefined\",\n                                                                                              \"output-height\": 20.0,\n                                                                                              \"output-width\": 170.0,\n                                                                                              \"width\": 170.0,\n                                                                                              \"width-mode\": \"exactly\"\n                                                                                            }\n                                                                                          ]\n                                                                                        },\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.333333492279053\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"flex-shrink\": 1.0\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"flex-direction\": \"row\",\n                                                                                  \"justify-content\": \"space-between\",\n                                                                                  \"margin-end\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 0.0\n                                                                                  },\n                                                                                  \"margin-start\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 8.0\n                                                                                  },\n                                                                                  \"margin-vertical\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 12.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"width\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 178.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"flex-direction\": \"row\",\n                                                                      \"flex-grow\": 1.0,\n                                                                      \"justify-content\": \"space-between\"\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": null\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 4.0\n                                                          },\n                                                          \"margin-horizontal\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": -5.0\n                                                          },\n                                                          \"position-type\": \"absolute\",\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": -5.0\n                                                          },\n                                                          \"position-type\": \"absolute\",\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 1.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": -5.0\n                                                          },\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"align-self\": \"center\",\n                                                      \"flex-grow\": 1.0,\n                                                      \"width\": {\n                                                        \"unit\": \"pct\",\n                                                        \"value\": 100.0\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": null\n                                              },\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.3333333432674408\n                                                              },\n                                                              \"margin-horizontal\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 16.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": null\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.3333333432674408\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"height\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  },\n                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"border-all\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 1.0\n                                                                                                                  },\n                                                                                                                  \"height\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  },\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": null\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"margin-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7656,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 17.66666603088379,\n                                                                                                                          \"output-width\": 102.0,\n                                                                                                                          \"width\": 102.0,\n                                                                                                                          \"width-mode\": \"exactly\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -4.0\n                                                                                                                      },\n                                                                                                                      \"margin-top\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -3.3333332538604736\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                  \"padding-vertical\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 5.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": null\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": {\n                                                                                                              \"measure-funcs\": [\n                                                                                                                {\n                                                                                                                  \"duration-ns\": 7396,\n                                                                                                                  \"height\": null,\n                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                  \"output-height\": 15.333333015441895,\n                                                                                                                  \"output-width\": 102.0,\n                                                                                                                  \"width\": 102.0,\n                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                }\n                                                                                                              ]\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -3.6666667461395264\n                                                                                                              },\n                                                                                                              \"margin-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -2.6666667461395264\n                                                                                                              },\n                                                                                                              \"padding-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"padding-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 3.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 1.0,\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          },\n                                                                                                          \"justify-content\": \"center\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": -4.0\n                                                                                                          },\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"flex\": 1.0,\n                                                                                                      \"flex-direction\": \"row\",\n                                                                                                      \"justify-content\": \"center\",\n                                                                                                      \"padding-bottom\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 10.0\n                                                                                                      },\n                                                                                                      \"padding-left\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 8.0\n                                                                                                      },\n                                                                                                      \"padding-right\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 8.0\n                                                                                                      },\n                                                                                                      \"padding-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 10.0\n                                                                                                      },\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 178.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          },\n                                                                                                                          \"overflow\": \"hidden\",\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 178.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"flex-direction\": \"row\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"flex-grow\": 1.0,\n                                                                                                              \"flex-shrink\": 1.0,\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"scroll\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          },\n                                                                                                                          \"margin-right\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 4.0\n                                                                                                                          },\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          },\n                                                                                                                          \"margin-right\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 4.0\n                                                                                                                          },\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          },\n                                                                                                                          \"margin-right\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 4.0\n                                                                                                                          },\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          },\n                                                                                                                          \"margin-right\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 4.0\n                                                                                                                          },\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      },\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"height\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          },\n                                                                                                                          \"margin-right\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 0.0\n                                                                                                                          },\n                                                                                                                          \"width\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 6.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                      \"padding-all\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                  \"justify-content\": \"center\",\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 8.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              },\n                                                                                                              \"position-type\": \"absolute\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"border-all\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 1.0\n                                                                                                              },\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              },\n                                                                                                              \"position-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-left\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-type\": \"absolute\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"overflow\": \"hidden\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": {\n                                                                                                                          \"measure-funcs\": [\n                                                                                                                            {\n                                                                                                                              \"duration-ns\": 9115,\n                                                                                                                              \"height\": null,\n                                                                                                                              \"height-mode\": \"undefined\",\n                                                                                                                              \"output-height\": 17.66666603088379,\n                                                                                                                              \"output-width\": 170.0,\n                                                                                                                              \"width\": 170.0,\n                                                                                                                              \"width-mode\": \"exactly\"\n                                                                                                                            }\n                                                                                                                          ]\n                                                                                                                        },\n                                                                                                                        \"style\": {\n                                                                                                                          \"margin-bottom\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": -4.333333492279053\n                                                                                                                          },\n                                                                                                                          \"margin-top\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": -4.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex-grow\": 1.0,\n                                                                                                                      \"flex-shrink\": 1.0\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                  \"justify-content\": \"space-between\",\n                                                                                                                  \"margin-end\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"margin-start\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 8.0\n                                                                                                                  },\n                                                                                                                  \"margin-vertical\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 12.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": null\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 178.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": {\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 178.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": null\n                                                                                      },\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"height\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  },\n                                                                                                                  \"overflow\": \"hidden\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"border-all\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 1.0\n                                                                                                                  },\n                                                                                                                  \"height\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  },\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\",\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 32.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"position-bottom\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-left\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-right\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-top\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 0.0\n                                                                                                                  },\n                                                                                                                  \"position-type\": \"absolute\"\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": null\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"margin-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 8.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 7188,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 17.66666603088379,\n                                                                                                                          \"output-width\": 102.0,\n                                                                                                                          \"width\": 102.0,\n                                                                                                                          \"width-mode\": \"exactly\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex\": 1.0,\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -4.0\n                                                                                                                      },\n                                                                                                                      \"margin-top\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -3.3333332538604736\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"align-items\": \"center\",\n                                                                                                                  \"flex-direction\": \"row\",\n                                                                                                                  \"padding-vertical\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 5.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": null\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": {\n                                                                                                              \"measure-funcs\": [\n                                                                                                                {\n                                                                                                                  \"duration-ns\": 5834,\n                                                                                                                  \"height\": null,\n                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                  \"output-height\": 15.333333015441895,\n                                                                                                                  \"output-width\": 102.0,\n                                                                                                                  \"width\": 102.0,\n                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                }\n                                                                                                              ]\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -3.6666667461395264\n                                                                                                              },\n                                                                                                              \"margin-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -2.6666667461395264\n                                                                                                              },\n                                                                                                              \"padding-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 5.0\n                                                                                                              },\n                                                                                                              \"padding-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 3.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"flex\": 1.0,\n                                                                                                          \"padding-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 4.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 16.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          },\n                                                                                                          \"justify-content\": \"center\",\n                                                                                                          \"margin-horizontal\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": -4.0\n                                                                                                          },\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 24.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": {\n                                                                                                      \"align-items\": \"center\",\n                                                                                                      \"flex\": 1.0,\n                                                                                                      \"flex-direction\": \"row\",\n                                                                                                      \"justify-content\": \"center\",\n                                                                                                      \"padding-bottom\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 10.0\n                                                                                                      },\n                                                                                                      \"padding-left\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 8.0\n                                                                                                      },\n                                                                                                      \"padding-right\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 8.0\n                                                                                                      },\n                                                                                                      \"padding-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 10.0\n                                                                                                      },\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 178.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              },\n                                                                                                              \"overflow\": \"hidden\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"border-all\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 1.0\n                                                                                                              },\n                                                                                                              \"height\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              },\n                                                                                                              \"position-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-left\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-right\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"position-type\": \"absolute\",\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"overflow\": \"hidden\"\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": {\n                                                                                                                      \"measure-funcs\": [\n                                                                                                                        {\n                                                                                                                          \"duration-ns\": 8854,\n                                                                                                                          \"height\": null,\n                                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                                          \"output-height\": 17.66666603088379,\n                                                                                                                          \"output-width\": 170.0,\n                                                                                                                          \"width\": 170.0,\n                                                                                                                          \"width-mode\": \"exactly\"\n                                                                                                                        }\n                                                                                                                      ]\n                                                                                                                    },\n                                                                                                                    \"style\": {\n                                                                                                                      \"margin-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -4.333333492279053\n                                                                                                                      },\n                                                                                                                      \"margin-top\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": -4.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"flex-grow\": 1.0,\n                                                                                                                  \"flex-shrink\": 1.0\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"flex-direction\": \"row\",\n                                                                                                              \"justify-content\": \"space-between\",\n                                                                                                              \"margin-end\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 0.0\n                                                                                                              },\n                                                                                                              \"margin-start\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 8.0\n                                                                                                              },\n                                                                                                              \"margin-vertical\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 12.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": null\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": {\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 178.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": null\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": null\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"flex-direction\": \"row\",\n                                                                                      \"flex-grow\": 1.0,\n                                                                                      \"justify-content\": \"space-between\"\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": {\n                                                                          \"margin-bottom\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 4.0\n                                                                          },\n                                                                          \"margin-horizontal\": {\n                                                                            \"unit\": \"px\",\n                                                                            \"value\": 0.0\n                                                                          }\n                                                                        }\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.3333333432674408\n                                                                  },\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 15677,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 14323,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 4.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"padding-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": null\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"height\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 178.0\n                                                                                              },\n                                                                                              \"width\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 178.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 14635,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 13906,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 4.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 15677,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": {\n                                                                                              \"measure-funcs\": null\n                                                                                            },\n                                                                                            \"style\": {\n                                                                                              \"height\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 178.0\n                                                                                              },\n                                                                                              \"width\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 178.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 14636,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 4.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"padding-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 11928,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 15312,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 4.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"padding-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.3333333432674408\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 32.0\n                                                                                                          },\n                                                                                                          \"overflow\": \"hidden\",\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 32.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"border-all\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 1.0\n                                                                                                          },\n                                                                                                          \"height\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 32.0\n                                                                                                          },\n                                                                                                          \"position-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-left\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-top\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-type\": \"absolute\",\n                                                                                                          \"width\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 32.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      },\n                                                                                                      {\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"position-bottom\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-left\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-right\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-top\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 0.0\n                                                                                                          },\n                                                                                                          \"position-type\": \"absolute\"\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": {\n                                                                                                  \"margin-right\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 8.0\n                                                                                                  }\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": {\n                                                                                                              \"measure-funcs\": [\n                                                                                                                {\n                                                                                                                  \"duration-ns\": 5938,\n                                                                                                                  \"height\": null,\n                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                  \"output-height\": 19.66666603088379,\n                                                                                                                  \"output-width\": 280.0,\n                                                                                                                  \"width\": 280.0,\n                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                }\n                                                                                                              ]\n                                                                                                            },\n                                                                                                            \"style\": {\n                                                                                                              \"flex\": 1.0,\n                                                                                                              \"margin-bottom\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -4.333333492279053\n                                                                                                              },\n                                                                                                              \"margin-top\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": -4.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"align-items\": \"center\",\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"padding-vertical\": {\n                                                                                                            \"unit\": \"px\",\n                                                                                                            \"value\": 5.0\n                                                                                                          }\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": null\n                                                                                                  },\n                                                                                                  {\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": {\n                                                                                                      \"measure-funcs\": [\n                                                                                                        {\n                                                                                                          \"duration-ns\": 7292,\n                                                                                                          \"height\": null,\n                                                                                                          \"height-mode\": \"undefined\",\n                                                                                                          \"output-height\": 15.333333015441895,\n                                                                                                          \"output-width\": 280.0,\n                                                                                                          \"width\": 280.0,\n                                                                                                          \"width-mode\": \"exactly\"\n                                                                                                        }\n                                                                                                      ]\n                                                                                                    },\n                                                                                                    \"style\": {\n                                                                                                      \"margin-bottom\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": -3.6666667461395264\n                                                                                                      },\n                                                                                                      \"margin-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": -2.6666667461395264\n                                                                                                      },\n                                                                                                      \"padding-bottom\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 5.0\n                                                                                                      },\n                                                                                                      \"padding-top\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 3.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": {\n                                                                                                  \"flex\": 1.0\n                                                                                                }\n                                                                                              },\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": {\n                                                                                                      \"height\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 16.0\n                                                                                                      },\n                                                                                                      \"overflow\": \"hidden\",\n                                                                                                      \"width\": {\n                                                                                                        \"unit\": \"px\",\n                                                                                                        \"value\": 16.0\n                                                                                                      }\n                                                                                                    }\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": {\n                                                                                                  \"align-items\": \"center\",\n                                                                                                  \"height\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 24.0\n                                                                                                  },\n                                                                                                  \"justify-content\": \"center\",\n                                                                                                  \"margin-horizontal\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  },\n                                                                                                  \"width\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": 24.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"align-items\": \"center\",\n                                                                                              \"flex\": 1.0,\n                                                                                              \"flex-direction\": \"row\",\n                                                                                              \"justify-content\": \"center\",\n                                                                                              \"padding-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 10.0\n                                                                                              },\n                                                                                              \"padding-left\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              },\n                                                                                              \"padding-right\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 12.0\n                                                                                              },\n                                                                                              \"padding-top\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 10.0\n                                                                                              },\n                                                                                              \"width\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 360.0\n                                                                                              }\n                                                                                            }\n                                                                                          },\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"children\": [\n                                                                                                  {\n                                                                                                    \"children\": [\n                                                                                                      {\n                                                                                                        \"children\": [\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\",\n                                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 1660833,\n                                                                                                                                  \"height\": 178.0,\n                                                                                                                                  \"height-mode\": \"at-most\",\n                                                                                                                                  \"output-height\": 178.0,\n                                                                                                                                  \"output-width\": 178.0,\n                                                                                                                                  \"width\": 178.0,\n                                                                                                                                  \"width-mode\": \"at-most\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": null\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": null\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"align-items\": \"center\",\n                                                                                                                      \"height\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      },\n                                                                                                                      \"justify-content\": \"center\",\n                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                      \"width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"border-all\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"height\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      },\n                                                                                                                      \"position-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-left\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-right\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-top\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"absolute\",\n                                                                                                                      \"width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"overflow\": \"hidden\"\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"children\": [\n                                                                                                                              {\n                                                                                                                                \"config\": {\n                                                                                                                                  \"errata\": \"all\",\n                                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                                },\n                                                                                                                                \"node\": {\n                                                                                                                                  \"measure-funcs\": [\n                                                                                                                                    {\n                                                                                                                                      \"duration-ns\": 10313,\n                                                                                                                                      \"height\": null,\n                                                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                                                      \"output-height\": 17.66666603088379,\n                                                                                                                                      \"output-width\": 170.0,\n                                                                                                                                      \"width\": 170.0,\n                                                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                                                    }\n                                                                                                                                  ]\n                                                                                                                                },\n                                                                                                                                \"style\": {\n                                                                                                                                  \"margin-bottom\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": -4.333333492279053\n                                                                                                                                  },\n                                                                                                                                  \"margin-top\": {\n                                                                                                                                    \"unit\": \"px\",\n                                                                                                                                    \"value\": -4.0\n                                                                                                                                  }\n                                                                                                                                }\n                                                                                                                              }\n                                                                                                                            ],\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\",\n                                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                                            },\n                                                                                                                            \"node\": null,\n                                                                                                                            \"style\": {\n                                                                                                                              \"flex-grow\": 1.0,\n                                                                                                                              \"flex-shrink\": 1.0\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-direction\": \"row\",\n                                                                                                                          \"justify-content\": \"space-between\",\n                                                                                                                          \"margin-end\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 0.0\n                                                                                                                          },\n                                                                                                                          \"margin-start\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 8.0\n                                                                                                                          },\n                                                                                                                          \"margin-vertical\": {\n                                                                                                                            \"unit\": \"px\",\n                                                                                                                            \"value\": 12.0\n                                                                                                                          }\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": null\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"width\": {\n                                                                                                                    \"unit\": \"px\",\n                                                                                                                    \"value\": 178.0\n                                                                                                                  }\n                                                                                                                }\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          },\n                                                                                                          {\n                                                                                                            \"children\": [\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"height\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      },\n                                                                                                                      \"overflow\": \"hidden\",\n                                                                                                                      \"width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  },\n                                                                                                                  {\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"border-all\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 1.0\n                                                                                                                      },\n                                                                                                                      \"height\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      },\n                                                                                                                      \"position-bottom\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-left\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-right\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-top\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"position-type\": \"absolute\",\n                                                                                                                      \"width\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 178.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": {\n                                                                                                                  \"overflow\": \"hidden\"\n                                                                                                                }\n                                                                                                              },\n                                                                                                              {\n                                                                                                                \"children\": [\n                                                                                                                  {\n                                                                                                                    \"children\": [\n                                                                                                                      {\n                                                                                                                        \"children\": [\n                                                                                                                          {\n                                                                                                                            \"config\": {\n                                                                                                                              \"errata\": \"all\",\n                                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                                            },\n                                                                                                                            \"node\": {\n                                                                                                                              \"measure-funcs\": [\n                                                                                                                                {\n                                                                                                                                  \"duration-ns\": 10782,\n                                                                                                                                  \"height\": null,\n                                                                                                                                  \"height-mode\": \"undefined\",\n                                                                                                                                  \"output-height\": 17.66666603088379,\n                                                                                                                                  \"output-width\": 170.0,\n                                                                                                                                  \"width\": 170.0,\n                                                                                                                                  \"width-mode\": \"exactly\"\n                                                                                                                                }\n                                                                                                                              ]\n                                                                                                                            },\n                                                                                                                            \"style\": {\n                                                                                                                              \"margin-bottom\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.333333492279053\n                                                                                                                              },\n                                                                                                                              \"margin-top\": {\n                                                                                                                                \"unit\": \"px\",\n                                                                                                                                \"value\": -4.0\n                                                                                                                              }\n                                                                                                                            }\n                                                                                                                          }\n                                                                                                                        ],\n                                                                                                                        \"config\": {\n                                                                                                                          \"errata\": \"all\",\n                                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                                        },\n                                                                                                                        \"node\": null,\n                                                                                                                        \"style\": {\n                                                                                                                          \"flex-grow\": 1.0,\n                                                                                                                          \"flex-shrink\": 1.0\n                                                                                                                        }\n                                                                                                                      }\n                                                                                                                    ],\n                                                                                                                    \"config\": {\n                                                                                                                      \"errata\": \"all\",\n                                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                                    },\n                                                                                                                    \"node\": null,\n                                                                                                                    \"style\": {\n                                                                                                                      \"flex-direction\": \"row\",\n                                                                                                                      \"justify-content\": \"space-between\",\n                                                                                                                      \"margin-end\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 0.0\n                                                                                                                      },\n                                                                                                                      \"margin-start\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 8.0\n                                                                                                                      },\n                                                                                                                      \"margin-vertical\": {\n                                                                                                                        \"unit\": \"px\",\n                                                                                                                        \"value\": 12.0\n                                                                                                                      }\n                                                                                                                    }\n                                                                                                                  }\n                                                                                                                ],\n                                                                                                                \"config\": {\n                                                                                                                  \"errata\": \"all\",\n                                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                                },\n                                                                                                                \"node\": null,\n                                                                                                                \"style\": null\n                                                                                                              }\n                                                                                                            ],\n                                                                                                            \"config\": {\n                                                                                                              \"errata\": \"all\",\n                                                                                                              \"point-scale-factor\": 3.0\n                                                                                                            },\n                                                                                                            \"node\": null,\n                                                                                                            \"style\": {\n                                                                                                              \"width\": {\n                                                                                                                \"unit\": \"px\",\n                                                                                                                \"value\": 178.0\n                                                                                                              }\n                                                                                                            }\n                                                                                                          }\n                                                                                                        ],\n                                                                                                        \"config\": {\n                                                                                                          \"errata\": \"all\",\n                                                                                                          \"point-scale-factor\": 3.0\n                                                                                                        },\n                                                                                                        \"node\": null,\n                                                                                                        \"style\": {\n                                                                                                          \"flex-direction\": \"row\",\n                                                                                                          \"flex-grow\": 1.0,\n                                                                                                          \"justify-content\": \"space-between\"\n                                                                                                        }\n                                                                                                      }\n                                                                                                    ],\n                                                                                                    \"config\": {\n                                                                                                      \"errata\": \"all\",\n                                                                                                      \"point-scale-factor\": 3.0\n                                                                                                    },\n                                                                                                    \"node\": null,\n                                                                                                    \"style\": null\n                                                                                                  }\n                                                                                                ],\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": null,\n                                                                                                \"style\": null\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"margin-bottom\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 4.0\n                                                                                              },\n                                                                                              \"margin-horizontal\": {\n                                                                                                \"unit\": \"px\",\n                                                                                                \"value\": 0.0\n                                                                                              }\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"margin-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": -4.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"padding-bottom\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 4.0\n                                                                                      }\n                                                                                    }\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": null\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.3333333432674408\n                                                                  },\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 16.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 13073,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 15000,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          },\n                                                                          {\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"height\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 4.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      },\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 13750,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"overflow\": \"hidden\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      },\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"border-all\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 1.0\n                                                                                          },\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          },\n                                                                                          \"position-bottom\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-right\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"position-type\": \"absolute\",\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 178.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"overflow\": \"hidden\"\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"children\": [\n                                                                                          {\n                                                                                            \"children\": [\n                                                                                              {\n                                                                                                \"config\": {\n                                                                                                  \"errata\": \"all\",\n                                                                                                  \"point-scale-factor\": 3.0\n                                                                                                },\n                                                                                                \"node\": {\n                                                                                                  \"measure-funcs\": [\n                                                                                                    {\n                                                                                                      \"duration-ns\": 13541,\n                                                                                                      \"height\": null,\n                                                                                                      \"height-mode\": \"undefined\",\n                                                                                                      \"output-height\": 20.0,\n                                                                                                      \"output-width\": 170.0,\n                                                                                                      \"width\": 170.0,\n                                                                                                      \"width-mode\": \"exactly\"\n                                                                                                    }\n                                                                                                  ]\n                                                                                                },\n                                                                                                \"style\": {\n                                                                                                  \"margin-bottom\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.333333492279053\n                                                                                                  },\n                                                                                                  \"margin-top\": {\n                                                                                                    \"unit\": \"px\",\n                                                                                                    \"value\": -4.0\n                                                                                                  }\n                                                                                                }\n                                                                                              }\n                                                                                            ],\n                                                                                            \"config\": {\n                                                                                              \"errata\": \"all\",\n                                                                                              \"point-scale-factor\": 3.0\n                                                                                            },\n                                                                                            \"node\": null,\n                                                                                            \"style\": {\n                                                                                              \"flex-grow\": 1.0,\n                                                                                              \"flex-shrink\": 1.0\n                                                                                            }\n                                                                                          }\n                                                                                        ],\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"flex-direction\": \"row\",\n                                                                                          \"justify-content\": \"space-between\",\n                                                                                          \"margin-end\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 0.0\n                                                                                          },\n                                                                                          \"margin-start\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 8.0\n                                                                                          },\n                                                                                          \"margin-vertical\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 12.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": {\n                                                                                  \"width\": {\n                                                                                    \"unit\": \"px\",\n                                                                                    \"value\": 178.0\n                                                                                  }\n                                                                                }\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"flex-grow\": 1.0,\n                                                                              \"justify-content\": \"space-between\"\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-bottom\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 4.0\n                                                                  },\n                                                                  \"margin-horizontal\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 0.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"overflow\": \"hidden\",\n                                                              \"padding-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 0.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 360.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 10.0\n                                                              },\n                                                              \"position-left\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": -5.0\n                                                              },\n                                                              \"position-type\": \"absolute\",\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 10.0\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"children\": [\n                                                                      {\n                                                                        \"children\": [\n                                                                          {\n                                                                            \"children\": [\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 178.0\n                                                                                      },\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 178.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 16.0\n                                                                                          },\n                                                                                          \"margin-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 11.0\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 11.0\n                                                                                          },\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 145.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": null\n                                                                              },\n                                                                              {\n                                                                                \"children\": [\n                                                                                  {\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": {\n                                                                                      \"height\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 178.0\n                                                                                      },\n                                                                                      \"width\": {\n                                                                                        \"unit\": \"px\",\n                                                                                        \"value\": 178.0\n                                                                                      }\n                                                                                    }\n                                                                                  },\n                                                                                  {\n                                                                                    \"children\": [\n                                                                                      {\n                                                                                        \"config\": {\n                                                                                          \"errata\": \"all\",\n                                                                                          \"point-scale-factor\": 3.0\n                                                                                        },\n                                                                                        \"node\": null,\n                                                                                        \"style\": {\n                                                                                          \"height\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 16.0\n                                                                                          },\n                                                                                          \"margin-left\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 11.0\n                                                                                          },\n                                                                                          \"margin-top\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 11.0\n                                                                                          },\n                                                                                          \"width\": {\n                                                                                            \"unit\": \"px\",\n                                                                                            \"value\": 145.0\n                                                                                          }\n                                                                                        }\n                                                                                      }\n                                                                                    ],\n                                                                                    \"config\": {\n                                                                                      \"errata\": \"all\",\n                                                                                      \"point-scale-factor\": 3.0\n                                                                                    },\n                                                                                    \"node\": null,\n                                                                                    \"style\": null\n                                                                                  }\n                                                                                ],\n                                                                                \"config\": {\n                                                                                  \"errata\": \"all\",\n                                                                                  \"point-scale-factor\": 3.0\n                                                                                },\n                                                                                \"node\": null,\n                                                                                \"style\": null\n                                                                              }\n                                                                            ],\n                                                                            \"config\": {\n                                                                              \"errata\": \"all\",\n                                                                              \"point-scale-factor\": 3.0\n                                                                            },\n                                                                            \"node\": null,\n                                                                            \"style\": {\n                                                                              \"flex-direction\": \"row\",\n                                                                              \"justify-content\": \"space-between\",\n                                                                              \"padding-bottom\": {\n                                                                                \"unit\": \"px\",\n                                                                                \"value\": 12.0\n                                                                              }\n                                                                            }\n                                                                          }\n                                                                        ],\n                                                                        \"config\": {\n                                                                          \"errata\": \"all\",\n                                                                          \"point-scale-factor\": 3.0\n                                                                        },\n                                                                        \"node\": null,\n                                                                        \"style\": null\n                                                                      }\n                                                                    ],\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": null\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": null\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": null\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": null\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"height\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 10.0\n                                                      },\n                                                      \"position-left\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -5.0\n                                                      },\n                                                      \"position-type\": \"absolute\",\n                                                      \"width\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 10.0\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"height\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 10.0\n                                                      },\n                                                      \"position-left\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -5.0\n                                                      },\n                                                      \"position-type\": \"absolute\",\n                                                      \"width\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 10.0\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": null\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": null,\n                                            \"style\": {\n                                              \"flex-grow\": 1.0,\n                                              \"padding-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.5\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"flex-grow\": 1.0,\n                                          \"flex-shrink\": 1.0,\n                                          \"overflow\": \"scroll\"\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"align-self\": \"center\",\n                                      \"flex-grow\": 1.0,\n                                      \"flex-shrink\": 1.0,\n                                      \"overflow\": \"scroll\",\n                                      \"width\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 360.0\n                                      }\n                                    }\n                                  },\n                                  {\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 360.0\n                                  }\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\",\n                              \"point-scale-factor\": 3.0\n                            },\n                            \"node\": null,\n                            \"style\": {\n                              \"flex-direction\": \"row\"\n                            }\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 360.0\n                                  }\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\",\n                              \"point-scale-factor\": 3.0\n                            },\n                            \"node\": null,\n                            \"style\": {\n                              \"flex-direction\": \"row\"\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\",\n                          \"point-scale-factor\": 3.0\n                        },\n                        \"node\": null,\n                        \"style\": {\n                          \"flex-direction\": \"row\"\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": null,\n                    \"style\": {\n                      \"flex\": 1.0,\n                      \"flex-direction\": \"row\",\n                      \"flex-grow\": 1.0,\n                      \"flex-shrink\": 1.0,\n                      \"overflow\": \"scroll\"\n                    }\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\",\n                  \"point-scale-factor\": 3.0\n                },\n                \"node\": null,\n                \"style\": {\n                  \"flex-grow\": 1.0\n                }\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\",\n              \"point-scale-factor\": 3.0\n            },\n            \"node\": null,\n            \"style\": {\n              \"flex-grow\": 1.0\n            }\n          },\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": {\n                      \"measure-funcs\": [\n                        {\n                          \"duration-ns\": 17031,\n                          \"height\": null,\n                          \"height-mode\": \"undefined\",\n                          \"output-height\": 8.333333015441895,\n                          \"output-width\": 57.66666793823242,\n                          \"width\": 356.0,\n                          \"width-mode\": \"at-most\"\n                        }\n                      ]\n                    },\n                    \"style\": null\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\",\n                  \"point-scale-factor\": 3.0\n                },\n                \"node\": null,\n                \"style\": null\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\",\n              \"point-scale-factor\": 3.0\n            },\n            \"node\": null,\n            \"style\": {\n              \"align-items\": \"center\",\n              \"justify-content\": \"center\",\n              \"padding-all\": {\n                \"unit\": \"px\",\n                \"value\": 2.0\n              },\n              \"position-right\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-top\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-type\": \"absolute\"\n            }\n          }\n        ],\n        \"config\": {\n          \"errata\": \"all\",\n          \"point-scale-factor\": 3.0\n        },\n        \"node\": null,\n        \"style\": {\n          \"flex\": 1.0\n        }\n      }\n    ],\n    \"config\": {\n      \"errata\": \"all\",\n      \"point-scale-factor\": 3.0\n    },\n    \"node\": null,\n    \"style\": {\n      \"max-height\": {\n        \"unit\": \"px\",\n        \"value\": 604.3333129882813\n      },\n      \"max-width\": {\n        \"unit\": \"px\",\n        \"value\": 360.0\n      },\n      \"min-height\": {\n        \"unit\": \"px\",\n        \"value\": 604.3333129882813\n      },\n      \"min-width\": {\n        \"unit\": \"px\",\n        \"value\": 360.0\n      }\n    }\n  }\n}"
  },
  {
    "path": "benchmark/captures/profile-ios.json",
    "content": "{\n  \"layout-inputs\": {\n    \"available-height\": 821.0,\n    \"available-width\": 430.0,\n    \"owner-direction\": \"ltr\"\n  },\n  \"tree\": {\n    \"children\": [\n      {\n        \"children\": [\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"children\": [\n                          {\n                            \"config\": {\n                              \"errata\": \"all\",\n                              \"point-scale-factor\": 3.0\n                            },\n                            \"node\": null,\n                            \"style\": null\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 6.0\n                                                          },\n                                                          \"overflow\": \"hidden\",\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 6.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"align-items\": \"center\",\n                                                      \"height\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 9.0\n                                                      },\n                                                      \"justify-content\": \"center\",\n                                                      \"position-end\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 1.5\n                                                      },\n                                                      \"position-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 0.0\n                                                      },\n                                                      \"position-type\": \"absolute\",\n                                                      \"width\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 9.0\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": {\n                                                      \"measure-funcs\": [\n                                                        {\n                                                          \"duration-ns\": 6958,\n                                                          \"height\": null,\n                                                          \"height-mode\": \"undefined\",\n                                                          \"output-height\": 20.0,\n                                                          \"output-width\": 66.0,\n                                                          \"width\": null,\n                                                          \"width-mode\": \"undefined\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"style\": {\n                                                      \"flex-shrink\": 1.0,\n                                                      \"margin-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -3.6666667461395264\n                                                      },\n                                                      \"margin-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -4.666666507720947\n                                                      },\n                                                      \"padding-vertical\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 8.0\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"align-items\": \"center\",\n                                                  \"flex-direction\": \"row\",\n                                                  \"justify-content\": \"center\",\n                                                  \"margin-end\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 8.0\n                                                  },\n                                                  \"min-height\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 36.0\n                                                  },\n                                                  \"min-width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 44.0\n                                                  },\n                                                  \"padding-horizontal\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 12.0\n                                                  }\n                                                }\n                                              },\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": {\n                                                      \"measure-funcs\": [\n                                                        {\n                                                          \"duration-ns\": 6375,\n                                                          \"height\": null,\n                                                          \"height-mode\": \"undefined\",\n                                                          \"output-height\": 20.0,\n                                                          \"output-width\": 73.33333587646484,\n                                                          \"width\": null,\n                                                          \"width-mode\": \"undefined\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"style\": {\n                                                      \"flex-shrink\": 1.0,\n                                                      \"margin-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -3.6666667461395264\n                                                      },\n                                                      \"margin-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -4.666666507720947\n                                                      },\n                                                      \"padding-vertical\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 8.0\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"align-items\": \"center\",\n                                                  \"flex-direction\": \"row\",\n                                                  \"justify-content\": \"center\",\n                                                  \"margin-end\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 8.0\n                                                  },\n                                                  \"min-height\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 36.0\n                                                  },\n                                                  \"min-width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 44.0\n                                                  },\n                                                  \"padding-horizontal\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 12.0\n                                                  }\n                                                }\n                                              },\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": {\n                                                      \"measure-funcs\": [\n                                                        {\n                                                          \"duration-ns\": 4250,\n                                                          \"height\": null,\n                                                          \"height-mode\": \"undefined\",\n                                                          \"output-height\": 20.0,\n                                                          \"output-width\": 59.66666793823242,\n                                                          \"width\": null,\n                                                          \"width-mode\": \"undefined\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"style\": {\n                                                      \"flex-shrink\": 1.0,\n                                                      \"margin-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -3.6666667461395264\n                                                      },\n                                                      \"margin-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -4.666666507720947\n                                                      },\n                                                      \"padding-vertical\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 8.0\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"align-items\": \"center\",\n                                                  \"flex-direction\": \"row\",\n                                                  \"justify-content\": \"center\",\n                                                  \"margin-end\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 8.0\n                                                  },\n                                                  \"min-height\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 36.0\n                                                  },\n                                                  \"min-width\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 44.0\n                                                  },\n                                                  \"padding-horizontal\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 12.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": null,\n                                            \"style\": {\n                                              \"flex-direction\": \"row\",\n                                              \"padding-horizontal\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              },\n                                              \"padding-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 16.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"flex-direction\": \"row\",\n                                          \"flex-grow\": 1.0,\n                                          \"flex-shrink\": 1.0,\n                                          \"overflow\": \"scroll\"\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"margin-bottom\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 16.0\n                                      },\n                                      \"margin-horizontal\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 8.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"overflow\": \"hidden\",\n                                                          \"width\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"position-right\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 0.0\n                                                      },\n                                                      \"position-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 0.0\n                                                      },\n                                                      \"position-type\": \"absolute\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 24.0\n                                                              },\n                                                              \"overflow\": \"hidden\",\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 24.0\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"padding-right\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 10.0\n                                                          }\n                                                        }\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": {\n                                                              \"measure-funcs\": [\n                                                                {\n                                                                  \"duration-ns\": 8000,\n                                                                  \"height\": null,\n                                                                  \"height-mode\": \"undefined\",\n                                                                  \"output-height\": 40.0,\n                                                                  \"output-width\": 286.3999938964844,\n                                                                  \"width\": 286.3999938964844,\n                                                                  \"width-mode\": \"exactly\"\n                                                                }\n                                                              ]\n                                                            },\n                                                            \"style\": {\n                                                              \"margin-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 3.6666667461395264\n                                                              },\n                                                              \"margin-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": -4.333333492279053\n                                                              }\n                                                            }\n                                                          },\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": {\n                                                              \"measure-funcs\": [\n                                                                {\n                                                                  \"duration-ns\": 11750,\n                                                                  \"height\": null,\n                                                                  \"height-mode\": \"undefined\",\n                                                                  \"output-height\": 40.0,\n                                                                  \"output-width\": 286.3999938964844,\n                                                                  \"width\": 286.3999938964844,\n                                                                  \"width-mode\": \"exactly\"\n                                                                }\n                                                              ]\n                                                            },\n                                                            \"style\": {\n                                                              \"margin-bottom\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 8.333333015441895\n                                                              },\n                                                              \"margin-top\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": -4.666666507720947\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"width\": {\n                                                            \"unit\": \"pct\",\n                                                            \"value\": 80.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"align-items\": \"center\",\n                                                          \"flex-direction\": \"row\",\n                                                          \"height\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 36.0\n                                                          },\n                                                          \"justify-content\": \"center\",\n                                                          \"padding-horizontal\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"align-self\": \"center\",\n                                                      \"flex-direction\": \"row\",\n                                                      \"flex-shrink\": 1.0\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"margin-all\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 16.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": null,\n                                            \"style\": {\n                                              \"margin-bottom\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 20.0\n                                              },\n                                              \"margin-horizontal\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 20.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": null\n                                      },\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"overflow\": \"hidden\",\n                                                          \"position-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-right\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-type\": \"absolute\"\n                                                        }\n                                                      },\n                                                      {\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"overflow\": \"hidden\",\n                                                          \"position-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-right\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"position-type\": \"absolute\"\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex\": 1.0\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"height\": {\n                                                    \"unit\": \"pct\",\n                                                    \"value\": 100.0\n                                                  },\n                                                  \"width\": {\n                                                    \"unit\": \"pct\",\n                                                    \"value\": 100.0\n                                                  }\n                                                }\n                                              },\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 64.80000305175781\n                                                              },\n                                                              \"margin-right\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 16.0\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 64.80000305175781\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      },\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 32.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\"\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"height\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 64.80000305175781\n                                                              },\n                                                              \"width\": {\n                                                                \"unit\": \"px\",\n                                                                \"value\": 64.80000305175781\n                                                              }\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": null\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\",\n                                                      \"justify-content\": \"flex-end\",\n                                                      \"position-right\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 16.0\n                                                      },\n                                                      \"position-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -32.400001525878906\n                                                      },\n                                                      \"position-type\": \"absolute\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": {\n                                                      \"measure-funcs\": [\n                                                        {\n                                                          \"duration-ns\": 6083,\n                                                          \"height\": null,\n                                                          \"height-mode\": \"undefined\",\n                                                          \"output-height\": 28.0,\n                                                          \"output-width\": 358.0,\n                                                          \"width\": 358.0,\n                                                          \"width-mode\": \"exactly\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"style\": {\n                                                      \"margin-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": 6.0\n                                                      },\n                                                      \"margin-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -6.0\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": {\n                                                      \"measure-funcs\": [\n                                                        {\n                                                          \"duration-ns\": 7417,\n                                                          \"height\": null,\n                                                          \"height-mode\": \"undefined\",\n                                                          \"output-height\": 20.0,\n                                                          \"output-width\": 358.0,\n                                                          \"width\": 358.0,\n                                                          \"width-mode\": \"exactly\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"style\": {\n                                                      \"margin-bottom\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -4.333333492279053\n                                                      },\n                                                      \"margin-top\": {\n                                                        \"unit\": \"px\",\n                                                        \"value\": -4.333333492279053\n                                                      }\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"padding-bottom\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 20.0\n                                                  },\n                                                  \"padding-left\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 16.0\n                                                  },\n                                                  \"padding-right\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 16.0\n                                                  },\n                                                  \"padding-top\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 20.0\n                                                  },\n                                                  \"position-bottom\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 0.0\n                                                  },\n                                                  \"position-type\": \"absolute\",\n                                                  \"width\": {\n                                                    \"unit\": \"pct\",\n                                                    \"value\": 100.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": null,\n                                            \"style\": null\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"height\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 468.0\n                                          },\n                                          \"margin-horizontal\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 20.0\n                                          },\n                                          \"margin-vertical\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 0.0\n                                          },\n                                          \"width\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 390.0\n                                          }\n                                        }\n                                      },\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"children\": [\n                                              {\n                                                \"children\": [\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": null\n                                                          },\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\",\n                                                                  \"max-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": {\n                                                                      \"measure-funcs\": [\n                                                                        {\n                                                                          \"duration-ns\": 4416,\n                                                                          \"height\": null,\n                                                                          \"height-mode\": \"undefined\",\n                                                                          \"output-height\": 16.0,\n                                                                          \"output-width\": 84.0,\n                                                                          \"width\": 84.0,\n                                                                          \"width-mode\": \"exactly\"\n                                                                        }\n                                                                      ]\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -3.3333332538604736\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 84.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"margin-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\",\n                                                                  \"max-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": {\n                                                                      \"measure-funcs\": [\n                                                                        {\n                                                                          \"duration-ns\": 2875,\n                                                                          \"height\": null,\n                                                                          \"height-mode\": \"undefined\",\n                                                                          \"output-height\": 32.0,\n                                                                          \"output-width\": 84.0,\n                                                                          \"width\": 84.0,\n                                                                          \"width-mode\": \"exactly\"\n                                                                        }\n                                                                      ]\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -3.3333332538604736\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 84.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"margin-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\",\n                                                                  \"max-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": {\n                                                                      \"measure-funcs\": [\n                                                                        {\n                                                                          \"duration-ns\": 3167,\n                                                                          \"height\": null,\n                                                                          \"height-mode\": \"undefined\",\n                                                                          \"output-height\": 16.0,\n                                                                          \"output-width\": 84.0,\n                                                                          \"width\": 84.0,\n                                                                          \"width-mode\": \"exactly\"\n                                                                        }\n                                                                      ]\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -3.3333332538604736\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 84.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"margin-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\",\n                                                                  \"max-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": {\n                                                                      \"measure-funcs\": [\n                                                                        {\n                                                                          \"duration-ns\": 6708,\n                                                                          \"height\": null,\n                                                                          \"height-mode\": \"undefined\",\n                                                                          \"output-height\": 32.0,\n                                                                          \"output-width\": 84.0,\n                                                                          \"width\": 84.0,\n                                                                          \"width-mode\": \"exactly\"\n                                                                        }\n                                                                      ]\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -3.3333332538604736\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 84.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"margin-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  },\n                                                  {\n                                                    \"children\": [\n                                                      {\n                                                        \"children\": [\n                                                          {\n                                                            \"children\": [\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": null,\n                                                                    \"style\": {\n                                                                      \"height\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      },\n                                                                      \"overflow\": \"hidden\",\n                                                                      \"width\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": 24.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"align-items\": \"center\",\n                                                                  \"flex\": 1.0,\n                                                                  \"justify-content\": \"center\",\n                                                                  \"max-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"min-height\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 60.0\n                                                                  }\n                                                                }\n                                                              },\n                                                              {\n                                                                \"children\": [\n                                                                  {\n                                                                    \"config\": {\n                                                                      \"errata\": \"all\",\n                                                                      \"point-scale-factor\": 3.0\n                                                                    },\n                                                                    \"node\": {\n                                                                      \"measure-funcs\": [\n                                                                        {\n                                                                          \"duration-ns\": 2500,\n                                                                          \"height\": null,\n                                                                          \"height-mode\": \"undefined\",\n                                                                          \"output-height\": 32.0,\n                                                                          \"output-width\": 84.0,\n                                                                          \"width\": 84.0,\n                                                                          \"width-mode\": \"exactly\"\n                                                                        }\n                                                                      ]\n                                                                    },\n                                                                    \"style\": {\n                                                                      \"margin-bottom\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -3.3333332538604736\n                                                                      },\n                                                                      \"margin-top\": {\n                                                                        \"unit\": \"px\",\n                                                                        \"value\": -4.0\n                                                                      }\n                                                                    }\n                                                                  }\n                                                                ],\n                                                                \"config\": {\n                                                                  \"errata\": \"all\",\n                                                                  \"point-scale-factor\": 3.0\n                                                                },\n                                                                \"node\": null,\n                                                                \"style\": {\n                                                                  \"margin-top\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 8.0\n                                                                  },\n                                                                  \"width\": {\n                                                                    \"unit\": \"px\",\n                                                                    \"value\": 84.0\n                                                                  }\n                                                                }\n                                                              }\n                                                            ],\n                                                            \"config\": {\n                                                              \"errata\": \"all\",\n                                                              \"point-scale-factor\": 3.0\n                                                            },\n                                                            \"node\": null,\n                                                            \"style\": {\n                                                              \"align-items\": \"center\",\n                                                              \"flex\": 1.0\n                                                            }\n                                                          }\n                                                        ],\n                                                        \"config\": {\n                                                          \"errata\": \"all\",\n                                                          \"point-scale-factor\": 3.0\n                                                        },\n                                                        \"node\": null,\n                                                        \"style\": {\n                                                          \"margin-bottom\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          },\n                                                          \"margin-left\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 0.0\n                                                          },\n                                                          \"margin-top\": {\n                                                            \"unit\": \"px\",\n                                                            \"value\": 16.0\n                                                          }\n                                                        }\n                                                      }\n                                                    ],\n                                                    \"config\": {\n                                                      \"errata\": \"all\",\n                                                      \"point-scale-factor\": 3.0\n                                                    },\n                                                    \"node\": null,\n                                                    \"style\": {\n                                                      \"flex-direction\": \"row\"\n                                                    }\n                                                  }\n                                                ],\n                                                \"config\": {\n                                                  \"errata\": \"all\",\n                                                  \"point-scale-factor\": 3.0\n                                                },\n                                                \"node\": null,\n                                                \"style\": {\n                                                  \"flex-direction\": \"row\",\n                                                  \"padding-right\": {\n                                                    \"unit\": \"px\",\n                                                    \"value\": 20.0\n                                                  }\n                                                }\n                                              }\n                                            ],\n                                            \"config\": {\n                                              \"errata\": \"all\",\n                                              \"point-scale-factor\": 3.0\n                                            },\n                                            \"node\": null,\n                                            \"style\": {\n                                              \"flex-direction\": \"row\",\n                                              \"flex-grow\": 1.0,\n                                              \"flex-shrink\": 1.0,\n                                              \"margin-left\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 20.0\n                                              },\n                                              \"margin-right\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"margin-top\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 0.0\n                                              },\n                                              \"overflow\": \"scroll\"\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\",\n                                          \"point-scale-factor\": 3.0\n                                        },\n                                        \"node\": null,\n                                        \"style\": {\n                                          \"margin-bottom\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 0.0\n                                          },\n                                          \"margin-vertical\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 12.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\",\n                                      \"point-scale-factor\": 3.0\n                                    },\n                                    \"node\": null,\n                                    \"style\": {\n                                      \"height\": {\n                                        \"unit\": \"pct\",\n                                        \"value\": 100.0\n                                      },\n                                      \"padding-bottom\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 12.0\n                                      },\n                                      \"width\": {\n                                        \"unit\": \"pct\",\n                                        \"value\": 100.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              },\n                              {\n                                \"config\": {\n                                  \"errata\": \"all\",\n                                  \"point-scale-factor\": 3.0\n                                },\n                                \"node\": null,\n                                \"style\": null\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\",\n                              \"point-scale-factor\": 3.0\n                            },\n                            \"node\": null,\n                            \"style\": null\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\",\n                          \"point-scale-factor\": 3.0\n                        },\n                        \"node\": null,\n                        \"style\": {\n                          \"flex-grow\": 1.0,\n                          \"flex-shrink\": 1.0,\n                          \"overflow\": \"scroll\"\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": null,\n                    \"style\": {\n                      \"flex\": 1.0,\n                      \"padding-bottom\": {\n                        \"unit\": \"px\",\n                        \"value\": 34.0\n                      },\n                      \"padding-left\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.0\n                      },\n                      \"padding-right\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.0\n                      },\n                      \"padding-top\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.0\n                      }\n                    }\n                  },\n                  {\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": null,\n                    \"style\": {\n                      \"height\": {\n                        \"unit\": \"px\",\n                        \"value\": 10.0\n                      },\n                      \"position-left\": {\n                        \"unit\": \"px\",\n                        \"value\": -5.0\n                      },\n                      \"position-type\": \"absolute\",\n                      \"width\": {\n                        \"unit\": \"px\",\n                        \"value\": 10.0\n                      }\n                    }\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\",\n                  \"point-scale-factor\": 3.0\n                },\n                \"node\": null,\n                \"style\": {\n                  \"flex-grow\": 1.0,\n                  \"height\": \"undefined\",\n                  \"width\": \"undefined\"\n                }\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\",\n              \"point-scale-factor\": 3.0\n            },\n            \"node\": null,\n            \"style\": {\n              \"flex-grow\": 1.0\n            }\n          },\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"config\": {\n                      \"errata\": \"all\",\n                      \"point-scale-factor\": 3.0\n                    },\n                    \"node\": {\n                      \"measure-funcs\": [\n                        {\n                          \"duration-ns\": 3292,\n                          \"height\": null,\n                          \"height-mode\": \"undefined\",\n                          \"output-height\": 7.333333492279053,\n                          \"output-width\": 67.66666412353516,\n                          \"width\": 426.0,\n                          \"width-mode\": \"at-most\"\n                        }\n                      ]\n                    },\n                    \"style\": null\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\",\n                  \"point-scale-factor\": 3.0\n                },\n                \"node\": null,\n                \"style\": null\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\",\n              \"point-scale-factor\": 3.0\n            },\n            \"node\": null,\n            \"style\": {\n              \"align-items\": \"center\",\n              \"justify-content\": \"center\",\n              \"padding-all\": {\n                \"unit\": \"px\",\n                \"value\": 2.0\n              },\n              \"position-right\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-top\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-type\": \"absolute\"\n            }\n          }\n        ],\n        \"config\": {\n          \"errata\": \"all\",\n          \"point-scale-factor\": 3.0\n        },\n        \"node\": null,\n        \"style\": {\n          \"flex\": 1.0\n        }\n      }\n    ],\n    \"config\": {\n      \"errata\": \"all\",\n      \"point-scale-factor\": 3.0\n    },\n    \"node\": null,\n    \"style\": {\n      \"max-height\": {\n        \"unit\": \"px\",\n        \"value\": 821.0\n      },\n      \"max-width\": {\n        \"unit\": \"px\",\n        \"value\": 430.0\n      },\n      \"min-height\": {\n        \"unit\": \"px\",\n        \"value\": 821.0\n      },\n      \"min-width\": {\n        \"unit\": \"px\",\n        \"value\": 430.0\n      }\n    }\n  }\n}"
  },
  {
    "path": "benchmark/captures/rendering-sample-mac.json",
    "content": "{\n  \"layout-inputs\": {\n    \"available-height\": 720.0,\n    \"available-width\": 1080.0,\n    \"owner-direction\": \"ltr\"\n  },\n  \"tree\": {\n    \"children\": [\n      {\n        \"children\": [\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"node\": {\n                          \"measure-funcs\": [\n                            {\n                              \"duration-ns\": 8167,\n                              \"height\": null,\n                              \"height-mode\": \"undefined\",\n                              \"output-height\": 295.0,\n                              \"output-width\": 816.0,\n                              \"width\": null,\n                              \"width-mode\": \"undefined\"\n                            }\n                          ]\n                        },\n                        \"style\": {\n                          \"margin-all\": {\n                            \"unit\": \"px\",\n                            \"value\": 25.0\n                          },\n                          \"min-width\": {\n                            \"unit\": \"px\",\n                            \"value\": 2000.0\n                          },\n                          \"position-left\": {\n                            \"unit\": \"px\",\n                            \"value\": 0.0\n                          },\n                          \"position-top\": {\n                            \"unit\": \"px\",\n                            \"value\": 350.0\n                          },\n                          \"position-type\": \"absolute\"\n                        }\n                      },\n                      {\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"height\": {\n                            \"unit\": \"px\",\n                            \"value\": 1052.0\n                          },\n                          \"overflow\": \"hidden\",\n                          \"position-left\": {\n                            \"unit\": \"px\",\n                            \"value\": 100.0\n                          },\n                          \"position-top\": {\n                            \"unit\": \"px\",\n                            \"value\": -35.0\n                          },\n                          \"position-type\": \"absolute\",\n                          \"width\": {\n                            \"unit\": \"px\",\n                            \"value\": 1210.0\n                          }\n                        }\n                      },\n                      {\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"height\": {\n                            \"unit\": \"px\",\n                            \"value\": 495.0\n                          },\n                          \"overflow\": \"hidden\",\n                          \"position-left\": {\n                            \"unit\": \"px\",\n                            \"value\": 595.0\n                          },\n                          \"position-top\": {\n                            \"unit\": \"px\",\n                            \"value\": 250.0\n                          },\n                          \"position-type\": \"absolute\",\n                          \"width\": {\n                            \"unit\": \"px\",\n                            \"value\": 459.0\n                          }\n                        }\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"height\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              },\n                              \"overflow\": \"hidden\",\n                              \"width\": {\n                                \"unit\": \"px\",\n                                \"value\": 320.0\n                              }\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"flex-direction\": \"row\",\n                          \"flex-wrap\": \"wrap\",\n                          \"height\": {\n                            \"unit\": \"pct\",\n                            \"value\": 100.0\n                          },\n                          \"position-type\": \"absolute\",\n                          \"width\": {\n                            \"unit\": \"pct\",\n                            \"value\": 100.0\n                          }\n                        }\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"node\": {\n                              \"measure-funcs\": [\n                                {\n                                  \"duration-ns\": 24625,\n                                  \"height\": null,\n                                  \"height-mode\": \"undefined\",\n                                  \"output-height\": 330.0,\n                                  \"output-width\": 408.0,\n                                  \"width\": 647.3333129882813,\n                                  \"width-mode\": \"at-most\"\n                                }\n                              ]\n                            },\n                            \"style\": {\n                              \"margin-all\": {\n                                \"unit\": \"px\",\n                                \"value\": 25.0\n                              },\n                              \"min-width\": {\n                                \"unit\": \"px\",\n                                \"value\": 1000.0\n                              },\n                              \"position-left\": {\n                                \"unit\": \"px\",\n                                \"value\": -30.0\n                              },\n                              \"position-top\": {\n                                \"unit\": \"px\",\n                                \"value\": 10.0\n                              },\n                              \"position-type\": \"absolute\"\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"node\": {\n                              \"measure-funcs\": [\n                                {\n                                  \"duration-ns\": 9625,\n                                  \"height\": null,\n                                  \"height-mode\": \"undefined\",\n                                  \"output-height\": 448.0,\n                                  \"output-width\": 562.5,\n                                  \"width\": 647.3333129882813,\n                                  \"width-mode\": \"at-most\"\n                                }\n                              ]\n                            },\n                            \"style\": {\n                              \"margin-all\": {\n                                \"unit\": \"px\",\n                                \"value\": 25.0\n                              },\n                              \"min-width\": {\n                                \"unit\": \"px\",\n                                \"value\": 1000.0\n                              },\n                              \"position-left\": {\n                                \"unit\": \"px\",\n                                \"value\": 20.0\n                              },\n                              \"position-top\": {\n                                \"unit\": \"px\",\n                                \"value\": 140.0\n                              },\n                              \"position-type\": \"absolute\"\n                            }\n                          },\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"node\": {\n                              \"measure-funcs\": [\n                                {\n                                  \"duration-ns\": 8417,\n                                  \"height\": null,\n                                  \"height-mode\": \"undefined\",\n                                  \"output-height\": 100.0,\n                                  \"output-width\": 294.0,\n                                  \"width\": 647.3333129882813,\n                                  \"width-mode\": \"at-most\"\n                                }\n                              ]\n                            },\n                            \"style\": {\n                              \"margin-all\": {\n                                \"unit\": \"px\",\n                                \"value\": 25.0\n                              },\n                              \"min-width\": {\n                                \"unit\": \"px\",\n                                \"value\": 1000.0\n                              },\n                              \"position-left\": {\n                                \"unit\": \"px\",\n                                \"value\": 520.0\n                              },\n                              \"position-top\": {\n                                \"unit\": \"px\",\n                                \"value\": 120.0\n                              },\n                              \"position-type\": \"absolute\"\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"flex\": 2.0,\n                          \"margin-all\": {\n                            \"unit\": \"px\",\n                            \"value\": 5.0\n                          }\n                        }\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"node\": {\n                              \"measure-funcs\": [\n                                {\n                                  \"duration-ns\": 9166,\n                                  \"height\": 676.0,\n                                  \"height-mode\": \"at-most\",\n                                  \"output-height\": 94.0,\n                                  \"output-width\": 328.6666564941406,\n                                  \"width\": 328.6666564941406,\n                                  \"width-mode\": \"exactly\"\n                                }\n                              ]\n                            },\n                            \"style\": {\n                              \"padding-all\": {\n                                \"unit\": \"px\",\n                                \"value\": 10.0\n                              }\n                            }\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8250,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8625,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 7250,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6833,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 7042,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6208,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6834,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8500,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6750,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6667,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8958,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 8125,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6541,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6541,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 6333,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"config\": {\n                                              \"errata\": \"all\"\n                                            },\n                                            \"node\": {\n                                              \"measure-funcs\": [\n                                                {\n                                                  \"duration-ns\": 7875,\n                                                  \"height\": 566.0,\n                                                  \"height-mode\": \"at-most\",\n                                                  \"output-height\": 21.0,\n                                                  \"output-width\": 158.33331298828125,\n                                                  \"width\": 158.33331298828125,\n                                                  \"width-mode\": \"exactly\"\n                                                }\n                                              ]\n                                            },\n                                            \"style\": {\n                                              \"margin-all\": {\n                                                \"unit\": \"px\",\n                                                \"value\": 8.0\n                                              }\n                                            }\n                                          }\n                                        ],\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": null\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"width\": {\n                                    \"unit\": \"pct\",\n                                    \"value\": 50.0\n                                  }\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"flex\": 1.0,\n                              \"flex-wrap\": \"wrap\"\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"border-all\": {\n                            \"unit\": \"px\",\n                            \"value\": 2.0\n                          },\n                          \"flex\": 1.0,\n                          \"margin-all\": {\n                            \"unit\": \"px\",\n                            \"value\": 10.0\n                          }\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\"\n                    },\n                    \"style\": {\n                      \"flex\": 1.0,\n                      \"flex-direction\": \"row\",\n                      \"height\": {\n                        \"unit\": \"pct\",\n                        \"value\": 100.0\n                      },\n                      \"width\": {\n                        \"unit\": \"pct\",\n                        \"value\": 100.0\n                      }\n                    }\n                  },\n                  {\n                    \"config\": {\n                      \"errata\": \"all\"\n                    },\n                    \"style\": {\n                      \"height\": {\n                        \"unit\": \"px\",\n                        \"value\": 50.0\n                      },\n                      \"position-bottom\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.0\n                      },\n                      \"position-left\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.0\n                      },\n                      \"position-type\": \"absolute\",\n                      \"width\": {\n                        \"unit\": \"px\",\n                        \"value\": 100.0\n                      }\n                    }\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"style\": {\n                  \"flex\": 1.0,\n                  \"height\": {\n                    \"unit\": \"pct\",\n                    \"value\": 100.0\n                  },\n                  \"min-height\": {\n                    \"unit\": \"px\",\n                    \"value\": 720.0\n                  },\n                  \"min-width\": {\n                    \"unit\": \"px\",\n                    \"value\": 800.0\n                  },\n                  \"width\": {\n                    \"unit\": \"pct\",\n                    \"value\": 100.0\n                  }\n                }\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\"\n            },\n            \"style\": {\n              \"flex\": 1.0\n            }\n          },\n          {\n            \"children\": [\n              {\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"node\": {\n                  \"measure-funcs\": [\n                    {\n                      \"duration-ns\": 7583,\n                      \"height\": null,\n                      \"height-mode\": \"undefined\",\n                      \"output-height\": 7.0,\n                      \"output-width\": 70.5,\n                      \"width\": 1076.0,\n                      \"width-mode\": \"at-most\"\n                    }\n                  ]\n                },\n                \"style\": null\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\"\n            },\n            \"style\": {\n              \"align-items\": \"center\",\n              \"justify-content\": \"center\",\n              \"padding-all\": {\n                \"unit\": \"px\",\n                \"value\": 2.0\n              },\n              \"position-bottom\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-right\": {\n                \"unit\": \"px\",\n                \"value\": 0.0\n              },\n              \"position-type\": \"absolute\"\n            }\n          },\n          {\n            \"children\": [\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"node\": {\n                                          \"measure-funcs\": [\n                                            {\n                                              \"duration-ns\": 478791,\n                                              \"height\": 44.0,\n                                              \"height-mode\": \"at-most\",\n                                              \"output-height\": 18.0,\n                                              \"output-width\": 5.0,\n                                              \"width\": 1016.0,\n                                              \"width-mode\": \"at-most\"\n                                            },\n                                            {\n                                              \"duration-ns\": 61250,\n                                              \"height\": 44.0,\n                                              \"height-mode\": \"at-most\",\n                                              \"output-height\": 18.0,\n                                              \"output-width\": 10.0,\n                                              \"width\": 10.0,\n                                              \"width-mode\": \"exactly\"\n                                            }\n                                          ]\n                                        },\n                                        \"style\": null\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": {\n                                      \"min-width\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 18.0\n                                      },\n                                      \"padding-left\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 4.0\n                                      },\n                                      \"padding-right\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 4.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"margin-right\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 8.0\n                                  },\n                                  \"padding-all\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 2.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"node\": {\n                                      \"measure-funcs\": null\n                                    },\n                                    \"style\": {\n                                      \"flex\": 1.0\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"align-self\": \"stretch\",\n                                  \"border-left\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 1.0\n                                  },\n                                  \"flex-grow\": 1.0,\n                                  \"flex-shrink\": 1.0,\n                                  \"padding-left\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 8.0\n                                  }\n                                }\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"config\": {\n                                          \"errata\": \"all\"\n                                        },\n                                        \"style\": {\n                                          \"height\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 8.0\n                                          },\n                                          \"overflow\": \"hidden\",\n                                          \"width\": {\n                                            \"unit\": \"px\",\n                                            \"value\": 8.0\n                                          }\n                                        }\n                                      }\n                                    ],\n                                    \"config\": {\n                                      \"errata\": \"all\"\n                                    },\n                                    \"style\": {\n                                      \"align-items\": \"center\",\n                                      \"align-self\": \"flex-end\",\n                                      \"height\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 20.0\n                                      },\n                                      \"justify-content\": \"center\",\n                                      \"width\": {\n                                        \"unit\": \"px\",\n                                        \"value\": 20.0\n                                      }\n                                    }\n                                  }\n                                ],\n                                \"config\": {\n                                  \"errata\": \"all\"\n                                },\n                                \"style\": {\n                                  \"align-self\": \"center\",\n                                  \"flex-direction\": \"row\",\n                                  \"margin-left\": {\n                                    \"unit\": \"px\",\n                                    \"value\": 5.0\n                                  }\n                                }\n                              }\n                            ],\n                            \"config\": {\n                              \"errata\": \"all\"\n                            },\n                            \"style\": {\n                              \"align-items\": \"flex-start\",\n                              \"flex-direction\": \"row\"\n                            }\n                          }\n                        ],\n                        \"config\": {\n                          \"errata\": \"all\"\n                        },\n                        \"style\": {\n                          \"height\": {\n                            \"unit\": \"px\",\n                            \"value\": 48.0\n                          },\n                          \"justify-content\": \"center\",\n                          \"margin-top\": {\n                            \"unit\": \"px\",\n                            \"value\": 0.5\n                          },\n                          \"padding-horizontal\": {\n                            \"unit\": \"px\",\n                            \"value\": 12.0\n                          },\n                          \"position-type\": \"relative\",\n                          \"width\": {\n                            \"unit\": \"pct\",\n                            \"value\": 100.0\n                          }\n                        }\n                      }\n                    ],\n                    \"config\": {\n                      \"errata\": \"all\"\n                    },\n                    \"style\": {\n                      \"height\": {\n                        \"unit\": \"px\",\n                        \"value\": 48.0\n                      },\n                      \"justify-content\": \"center\",\n                      \"margin-top\": {\n                        \"unit\": \"px\",\n                        \"value\": 0.5\n                      },\n                      \"position-type\": \"relative\",\n                      \"width\": {\n                        \"unit\": \"pct\",\n                        \"value\": 100.0\n                      }\n                    }\n                  }\n                ],\n                \"config\": {\n                  \"errata\": \"all\"\n                },\n                \"style\": {\n                  \"margin-bottom\": {\n                    \"unit\": \"px\",\n                    \"value\": 5.0\n                  },\n                  \"overflow\": \"hidden\"\n                }\n              }\n            ],\n            \"config\": {\n              \"errata\": \"all\"\n            },\n            \"style\": {\n              \"position-bottom\": {\n                \"unit\": \"px\",\n                \"value\": 20.0\n              },\n              \"position-left\": {\n                \"unit\": \"px\",\n                \"value\": 10.0\n              },\n              \"position-right\": {\n                \"unit\": \"px\",\n                \"value\": 10.0\n              },\n              \"position-type\": \"absolute\"\n            }\n          }\n        ],\n        \"config\": {\n          \"errata\": \"all\"\n        },\n        \"style\": {\n          \"flex\": 1.0\n        }\n      }\n    ],\n    \"config\": {\n      \"errata\": \"all\",\n      \"point-scale-factor\": 2.0\n    },\n    \"style\": {\n      \"max-height\": {\n        \"unit\": \"px\",\n        \"value\": 720.0\n      },\n      \"max-width\": {\n        \"unit\": \"px\",\n        \"value\": 1080.0\n      },\n      \"min-height\": {\n        \"unit\": \"px\",\n        \"value\": 720.0\n      },\n      \"min-width\": {\n        \"unit\": \"px\",\n        \"value\": 1080.0\n      }\n    }\n  }\n}"
  },
  {
    "path": "build.gradle",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nplugins {\n    id(\"com.android.library\") version \"8.12.0\" apply false\n    id(\"com.android.application\") version \"8.12.0\" apply false\n    id(\"io.github.gradle-nexus.publish-plugin\") version \"2.0.0\"\n    id 'org.jetbrains.kotlin.android' version '2.1.20' apply false\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\ngroup = \"com.facebook.yoga\"\n\nif (project.hasProperty(\"USE_SNAPSHOT\") && project.property(\"USE_SNAPSHOT\").toBoolean()) {\n    version = getProperty(\"VERSION_NAME\") + \"-SNAPSHOT\"\n} else {\n    version = getProperty(\"VERSION_NAME\")\n}\n\ndef sonatypeUsername = findProperty(\"SONATYPE_USERNAME\")?.toString()\ndef sonatypePassword = findProperty(\"SONATYPE_PASSWORD\")?.toString()\n\nnexusPublishing {\n    repositories {\n        sonatype {\n            username.set(sonatypeUsername)\n            password.set(sonatypePassword)\n            nexusUrl.set(uri(\"https://ossrh-staging-api.central.sonatype.com/service/local/\"))\n            snapshotRepositoryUrl.set(uri(\"https://central.sonatype.com/repository/maven-snapshots/\"))\n        }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.layout.buildDirectory\n}\n"
  },
  {
    "path": "build_fuzz_tests",
    "content": "#!/usr/bin/env sh\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nif [ \"$#\" -eq 0 ]; then\n  build_type=\"Debug\"\nelse\n  build_type=\"$1\"\nfi\n\nexport CC=clang\nexport CXX=clang++\n\n# Make sure libc++ isn't used, as libfuzzer is linked against stdlibc++ which causes conflicts\nunset CXXFLAGS\nexport LDFLAGS=-lstdc++\n\nif which ninja; then\n  set -e\n  cmake -B build -S . -D BUILD_FUZZ_TESTS=ON -D CMAKE_BUILD_TYPE=\"$build_type\" -G Ninja\nelse\n  set -e\n  cmake -B build -S . -D BUILD_FUZZ_TESTS=ON -D CMAKE_BUILD_TYPE=\"$build_type\"\nfi\n\ncmake --build build --target fuzz_layout\n"
  },
  {
    "path": "capture/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(capture)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\nset(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)\ninclude(${YOGA_ROOT}/cmake/project-defaults.cmake)\n\nadd_subdirectory(${YOGA_ROOT}/yoga ${CMAKE_CURRENT_BINARY_DIR}/yoga)\n\nfile(GLOB SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)\nadd_library(capture STATIC ${SOURCES})\n\ntarget_link_libraries(capture yogacore)\ntarget_include_directories(capture\n    PUBLIC\n    $<BUILD_INTERFACE:${YOGA_ROOT}/lib>\n    $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/yoga/lib>)\n"
  },
  {
    "path": "capture/CaptureTree.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <cassert>\n#include <fstream>\n\n#include <capture/CaptureTree.h>\n#include <capture/NodeToString.h>\n#include <nlohmann/json.hpp>\n\nnamespace facebook::yoga {\n\nusing namespace nlohmann;\n\nstatic void captureTree(\n    std::string_view serializedTree,\n    const std::filesystem::path& path) {\n  std::ofstream file(path);\n  file << serializedTree;\n}\n\nstatic SerializedMeasureFuncMap& currentSerializedMeasureFuncMap() {\n  static thread_local SerializedMeasureFuncMap map{};\n  return map;\n}\n\n/*\n * Capturing a tree often means that we capturing multiple serial layouts over\n * the course of the capture. Because of this, we need to make sure that we do\n * a full layout pass with no caching. If we do not do this there is a chance\n * we do not capture measure functions that were called and cached in previous\n * layouts. Missing these captures would lead to inaccurate benchmarking where\n * we do not have cached state.\n *\n * TODO: Dirty entire tree not just measure function nodes\n */\nstatic void dirtyTree(YGNodeRef node) {\n  if (YGNodeHasMeasureFunc(node)) {\n    YGNodeMarkDirty(node);\n  }\n\n  const size_t childCount = YGNodeGetChildCount(node);\n  for (size_t i = 0; i < childCount; i++) {\n    dirtyTree(YGNodeGetChild(node, i));\n  }\n}\n\nvoid YGNodeCalculateLayoutWithCapture(\n    YGNodeRef node,\n    float availableWidth,\n    float availableHeight,\n    YGDirection ownerDirection,\n    const std::filesystem::path& path) {\n  dirtyTree(node);\n  YGNodeCalculateLayout(node, availableWidth, availableHeight, ownerDirection);\n\n  json j;\n  serializeLayoutInputs(j, availableWidth, availableHeight, ownerDirection);\n  serializeTree(\n      j,\n      currentSerializedMeasureFuncMap(),\n      node,\n      PrintOptions::Style | PrintOptions::Children | PrintOptions::Config |\n          PrintOptions::Node);\n  // TODO: It is possible to have a measure function call layout again if, e.g.,\n  // views are nested in text. Need to be able to resolve this special case.\n  currentSerializedMeasureFuncMap().clear();\n  captureTree(j.dump(2), path);\n}\n\nvoid captureMeasureFunc(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode,\n    YGSize output,\n    std::chrono::steady_clock::duration durationNs) {\n  auto measureFuncIt = currentSerializedMeasureFuncMap().find(node);\n  if (measureFuncIt == currentSerializedMeasureFuncMap().end()) {\n    std::vector<SerializedMeasureFunc> vec{};\n    currentSerializedMeasureFuncMap().insert(std::make_pair(node, vec));\n  }\n  measureFuncIt = currentSerializedMeasureFuncMap().find(node);\n  assert(measureFuncIt != currentSerializedMeasureFuncMap().end());\n  measureFuncIt->second.push_back(\n      {width,\n       widthMode,\n       height,\n       heightMode,\n       output.width,\n       output.height,\n       durationNs.count()});\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "capture/CaptureTree.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <filesystem>\n#include <unordered_map>\n#include <vector>\n\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nstruct SerializedMeasureFunc {\n  float inputWidth{0.0f};\n  YGMeasureMode widthMode{YGMeasureModeUndefined};\n  float inputHeight{0.0};\n  YGMeasureMode heightMode{YGMeasureModeUndefined};\n  float outputWidth{0.0f};\n  float outputHeight{0.0f};\n  std::chrono::steady_clock::duration::rep durationNs{};\n};\n\nusing SerializedMeasureFuncMap =\n    std::unordered_map<YGNodeConstRef, std::vector<SerializedMeasureFunc>>;\n\nvoid YGNodeCalculateLayoutWithCapture(\n    YGNodeRef node,\n    float availableWidth,\n    float availableHeight,\n    YGDirection ownerDirection,\n    const std::filesystem::path& path);\n\nvoid captureMeasureFunc(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode,\n    YGSize output,\n    std::chrono::steady_clock::duration durationNs);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "capture/NodeToString.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <memory>\n#include <vector>\n\n#include <capture/NodeToString.h>\n\nnamespace facebook::yoga {\n\nusing namespace nlohmann;\n\nstatic void appendFloatIfNotDefault(\n    json& j,\n    std::string_view key,\n    float num,\n    float defaultNum) {\n  if (num != defaultNum && !YGFloatIsUndefined(num)) {\n    j[key] = num;\n  }\n}\n\nstatic void appendYGValueIfNotDefault(\n    json& j,\n    std::string_view key,\n    const YGValue& value,\n    const YGValue& defaultValue) {\n  if (value != defaultValue) {\n    if (value.unit == YGUnitAuto) {\n      j[key] = \"auto\";\n    } else if (value.unit == YGUnitUndefined) {\n      j[key] = \"undefined\";\n    } else {\n      std::string unit = value.unit == YGUnitPoint ? \"px\" : \"pct\";\n      j[key][\"value\"] = value.value;\n      j[key][\"unit\"] = unit;\n    }\n  }\n}\n\nstatic void appendEnumValueIfNotDefault(\n    json& j,\n    std::string_view key,\n    std::string_view value,\n    std::string_view defaultValue) {\n  if (value != defaultValue) {\n    j[key] = value;\n  }\n}\n\nstatic void appendBoolIfNotDefault(\n    json& j,\n    std::string_view key,\n    bool value,\n    bool defaultValue) {\n  if (value != defaultValue) {\n    j[key] = value;\n  }\n}\n\ntemplate <auto Field>\nstatic void appendEdges(\n    json& j,\n    const std::string& key,\n    YGNodeRef node,\n    YGNodeRef defaultNode) {\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-left\",\n      (*Field)(node, YGEdgeLeft),\n      (*Field)(defaultNode, YGEdgeLeft));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-right\",\n      (*Field)(node, YGEdgeRight),\n      (*Field)(defaultNode, YGEdgeRight));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-top\",\n      (*Field)(node, YGEdgeTop),\n      (*Field)(defaultNode, YGEdgeTop));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-bottom\",\n      (*Field)(node, YGEdgeBottom),\n      (*Field)(defaultNode, YGEdgeBottom));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-all\",\n      (*Field)(node, YGEdgeAll),\n      (*Field)(defaultNode, YGEdgeAll));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-start\",\n      (*Field)(node, YGEdgeStart),\n      (*Field)(defaultNode, YGEdgeStart));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-end\",\n      (*Field)(node, YGEdgeEnd),\n      (*Field)(defaultNode, YGEdgeEnd));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-vertical\",\n      (*Field)(node, YGEdgeVertical),\n      (*Field)(defaultNode, YGEdgeVertical));\n  appendYGValueIfNotDefault(\n      j[\"style\"],\n      key + \"-horizontal\",\n      (*Field)(node, YGEdgeHorizontal),\n      (*Field)(defaultNode, YGEdgeHorizontal));\n}\n\nstatic YGValue borderFloatToYGValue(YGNodeRef node, YGEdge edge) {\n  float val = YGNodeStyleGetBorder(node, edge);\n  YGUnit unit = YGFloatIsUndefined(val) ? YGUnitUndefined : YGUnitPoint;\n  return YGValue{val, unit};\n}\n\nstatic void serializeMeasureFuncResults(\n    json& j,\n    std::vector<SerializedMeasureFunc>& measureFuncs) {\n  for (auto measureFunc : measureFuncs) {\n    j[\"measure-funcs\"].push_back(\n        {{\"width\", measureFunc.inputWidth},\n         {\"width-mode\", YGMeasureModeToString(measureFunc.widthMode)},\n         {\"height\", measureFunc.inputHeight},\n         {\"height-mode\", YGMeasureModeToString(measureFunc.heightMode)},\n         {\"output-width\", measureFunc.outputWidth},\n         {\"output-height\", measureFunc.outputHeight},\n         {\"duration-ns\", measureFunc.durationNs}});\n  }\n}\n\nstatic void serializeTreeImpl(\n    json& j,\n    SerializedMeasureFuncMap& nodesToMeasureFuncs,\n    YGNodeRef node,\n    PrintOptions options) {\n  if ((options & PrintOptions::Layout) == PrintOptions::Layout) {\n    j[\"layout\"][\"width\"] = YGNodeStyleGetWidth(node).value;\n    j[\"layout\"][\"height\"] = YGNodeStyleGetHeight(node).value;\n    j[\"layout\"][\"top\"] = YGNodeStyleGetPosition(node, YGEdgeTop).value;\n    j[\"layout\"][\"left\"] = YGNodeStyleGetPosition(node, YGEdgeLeft).value;\n  }\n  std::unique_ptr<YGNode, decltype(&YGNodeFree)> defaultNode(\n      YGNodeNew(), YGNodeFree);\n\n  if ((options & PrintOptions::Style) == PrintOptions::Style) {\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"flex-direction\",\n        YGFlexDirectionToString(YGNodeStyleGetFlexDirection(node)),\n        YGFlexDirectionToString(\n            YGNodeStyleGetFlexDirection(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"justify-content\",\n        YGJustifyToString(YGNodeStyleGetJustifyContent(node)),\n        YGJustifyToString(YGNodeStyleGetJustifyContent(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"align-items\",\n        YGAlignToString(YGNodeStyleGetAlignItems(node)),\n        YGAlignToString(YGNodeStyleGetAlignItems(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"align-content\",\n        YGAlignToString(YGNodeStyleGetAlignContent(node)),\n        YGAlignToString(YGNodeStyleGetAlignContent(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"align-self\",\n        YGAlignToString(YGNodeStyleGetAlignSelf(node)),\n        YGAlignToString(YGNodeStyleGetAlignSelf(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"flex-wrap\",\n        YGWrapToString(YGNodeStyleGetFlexWrap(node)),\n        YGWrapToString(YGNodeStyleGetFlexWrap(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"overflow\",\n        YGOverflowToString(YGNodeStyleGetOverflow(node)),\n        YGOverflowToString(YGNodeStyleGetOverflow(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"display\",\n        YGDisplayToString(YGNodeStyleGetDisplay(node)),\n        YGDisplayToString(YGNodeStyleGetDisplay(defaultNode.get())));\n    appendEnumValueIfNotDefault(\n        j[\"style\"],\n        \"position-type\",\n        YGPositionTypeToString(YGNodeStyleGetPositionType(node)),\n        YGPositionTypeToString(YGNodeStyleGetPositionType(defaultNode.get())));\n\n    appendFloatIfNotDefault(\n        j[\"style\"],\n        \"flex-grow\",\n        YGNodeStyleGetFlexGrow(node),\n        YGNodeStyleGetFlexGrow(defaultNode.get()));\n    appendFloatIfNotDefault(\n        j[\"style\"],\n        \"flex-shrink\",\n        YGNodeStyleGetFlexShrink(node),\n        YGNodeStyleGetFlexShrink(defaultNode.get()));\n    appendFloatIfNotDefault(\n        j[\"style\"],\n        \"flex\",\n        YGNodeStyleGetFlex(node),\n        YGNodeStyleGetFlex(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"flex-basis\",\n        YGNodeStyleGetFlexBasis(node),\n        YGNodeStyleGetFlexBasis(defaultNode.get()));\n\n    appendEdges<&YGNodeStyleGetMargin>(j, \"margin\", node, defaultNode.get());\n    appendEdges<&YGNodeStyleGetPadding>(j, \"padding\", node, defaultNode.get());\n    appendEdges<&borderFloatToYGValue>(j, \"border\", node, defaultNode.get());\n    appendEdges<&YGNodeStyleGetPosition>(\n        j, \"position\", node, defaultNode.get());\n\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"gap\",\n        YGNodeStyleGetGap(node, YGGutterAll),\n        YGNodeStyleGetGap(defaultNode.get(), YGGutterAll));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"column-gap\",\n        YGNodeStyleGetGap(node, YGGutterColumn),\n        YGNodeStyleGetGap(defaultNode.get(), YGGutterColumn));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"row-gap\",\n        YGNodeStyleGetGap(node, YGGutterRow),\n        YGNodeStyleGetGap(defaultNode.get(), YGGutterRow));\n\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"width\",\n        YGNodeStyleGetWidth(node),\n        YGNodeStyleGetWidth(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"height\",\n        YGNodeStyleGetHeight(node),\n        YGNodeStyleGetHeight(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"max-width\",\n        YGNodeStyleGetMaxWidth(node),\n        YGNodeStyleGetMaxWidth(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"max-height\",\n        YGNodeStyleGetMaxHeight(node),\n        YGNodeStyleGetMaxHeight(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"min-width\",\n        YGNodeStyleGetMinWidth(node),\n        YGNodeStyleGetMinWidth(defaultNode.get()));\n    appendYGValueIfNotDefault(\n        j[\"style\"],\n        \"min-height\",\n        YGNodeStyleGetMinHeight(node),\n        YGNodeStyleGetMinHeight(defaultNode.get()));\n  }\n\n  if ((options & PrintOptions::Config) == PrintOptions::Config) {\n    YGConfigConstRef config = YGNodeGetConfig(node);\n    YGConfigConstRef defaultConfig = YGConfigGetDefault();\n\n    appendBoolIfNotDefault(\n        j[\"config\"],\n        \"use-web-defaults\",\n        YGConfigGetUseWebDefaults(config),\n        YGConfigGetUseWebDefaults(defaultConfig));\n    appendFloatIfNotDefault(\n        j[\"config\"],\n        \"point-scale-factor\",\n        YGConfigGetPointScaleFactor(config),\n        YGConfigGetPointScaleFactor(defaultConfig));\n    YGErrata errata = YGConfigGetErrata(config);\n    if (errata == YGErrataNone || errata == YGErrataAll ||\n        errata == YGErrataClassic) {\n      appendEnumValueIfNotDefault(\n          j[\"config\"],\n          \"errata\",\n          YGErrataToString(errata),\n          YGErrataToString(YGConfigGetErrata(defaultConfig)));\n    }\n\n    if (YGConfigIsExperimentalFeatureEnabled(\n            config, YGExperimentalFeatureWebFlexBasis) !=\n        YGConfigIsExperimentalFeatureEnabled(\n            defaultConfig, YGExperimentalFeatureWebFlexBasis)) {\n      j[\"config\"][\"experimental-features\"].push_back(\n          YGExperimentalFeatureToString(YGExperimentalFeatureWebFlexBasis));\n    }\n  }\n\n  if ((options & PrintOptions::Node) == PrintOptions::Node) {\n    appendBoolIfNotDefault(\n        j[\"node\"],\n        \"always-forms-containing-block\",\n        YGNodeGetAlwaysFormsContainingBlock(node),\n        YGNodeGetAlwaysFormsContainingBlock(defaultNode.get()));\n    if (YGNodeHasMeasureFunc(node)) {\n      auto measureFuncIt = nodesToMeasureFuncs.find(node);\n      if (measureFuncIt == nodesToMeasureFuncs.end()) {\n        j[\"node\"][\"measure-funcs\"];\n      } else {\n        serializeMeasureFuncResults(j[\"node\"], measureFuncIt->second);\n      }\n    }\n  }\n\n  const size_t childCount = YGNodeGetChildCount(node);\n  if ((options & PrintOptions::Children) == PrintOptions::Children &&\n      childCount > 0) {\n    for (size_t i = 0; i < childCount; i++) {\n      j[\"children\"].push_back({});\n      serializeTreeImpl(\n          j[\"children\"][i],\n          nodesToMeasureFuncs,\n          YGNodeGetChild(node, i),\n          options);\n    }\n  }\n}\n\nvoid serializeTree(\n    json& j,\n    SerializedMeasureFuncMap& nodesToMeasureFuncs,\n    YGNodeRef node,\n    PrintOptions options) {\n  serializeTreeImpl(j[\"tree\"], nodesToMeasureFuncs, node, options);\n}\n\nvoid serializeLayoutInputs(\n    json& j,\n    float availableWidth,\n    float availableHeight,\n    YGDirection ownerDirection) {\n  j[\"layout-inputs\"] = {\n      {\"available-width\", availableWidth},\n      {\"available-height\", availableHeight},\n      {\"owner-direction\", YGDirectionToString(ownerDirection)},\n  };\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "capture/NodeToString.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include <string>\n\n#include <capture/CaptureTree.h>\n#include <nlohmann/json.hpp>\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nenum class PrintOptions : uint8_t {\n  Layout = 1 << 0,\n  Children = 1 << 1,\n  Style = 1 << 2,\n  Config = 1 << 3,\n  Node = 1 << 4,\n};\nYG_DEFINE_ENUM_FLAG_OPERATORS(PrintOptions);\n\nvoid serializeTree(\n    nlohmann::json& j,\n    SerializedMeasureFuncMap& nodesToMeasureFuncs,\n    YGNodeRef node,\n    PrintOptions options);\n\nvoid serializeLayoutInputs(\n    nlohmann::json& j,\n    float availableWidth,\n    float availableHeight,\n    YGDirection ownerDirection);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "cmake/project-defaults.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_CXX_VISIBILITY_PRESET hidden)\nset(CMAKE_POSITION_INDEPENDENT_CODE ON)\n\nadd_compile_definitions($<$<CONFIG:DEBUG>:DEBUG>)\n\nif(MSVC)\n\nadd_compile_options(\n    # Don't omit frame pointers (e.g. for crash dumps)\n    /Oy-\n    # \"Standard C++ exception handling\" (C++ stack unwinding including extern c)\n    /EHsc\n    # Enable warnings and warnings as errors\n    /W4\n    /WX\n    # Enable RTTI\n    $<$<COMPILE_LANGUAGE:CXX>:/GR>\n    # Use /O2 (Maximize Speed)\n    $<$<CONFIG:RELEASE>:/O2>)\n\nelse()\n\nadd_compile_options(\n    # Don't omit frame pointers (e.g. for crash dumps)\n    -fno-omit-frame-pointer\n    # Enable exception handling\n    -fexceptions\n    # Enable warnings and warnings as errors\n    -Wall\n    -Werror\n    # Enable RTTI\n    $<$<COMPILE_LANGUAGE:CXX>:-frtti>\n    # Use -O2 (prioritize speed)\n    $<$<CONFIG:RELEASE>:-O2>\n    # Enable separate sections per function/data item\n    $<$<CONFIG:RELEASE>:-ffunction-sections>\n    $<$<CONFIG:RELEASE>:-fdata-sections>)\n\nadd_link_options(\n    # Discard unused sections\n    $<$<CONFIG:RELEASE>:$<$<CXX_COMPILER_ID:Clang,GNU>:-Wl,--gc-sections>>\n    $<$<CONFIG:RELEASE>:$<$<CXX_COMPILER_ID:AppleClang>:-Wl,-dead_strip>>)\n\nendif()\n"
  },
  {
    "path": "cmake/yoga-config.cmake.in",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n@PACKAGE_INIT@\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/yogaTargets.cmake\")\n\ncheck_required_components(yoga)"
  },
  {
    "path": "enums.py",
    "content": "#!/usr/bin/env fbpython\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\n\nENUMS = {\n    \"Direction\": [\"Inherit\", \"LTR\", \"RTL\"],\n    \"Unit\": [\n        \"Undefined\",\n        \"Point\",\n        \"Percent\",\n        \"Auto\",\n        \"MaxContent\",\n        \"FitContent\",\n        \"Stretch\",\n    ],\n    \"FlexDirection\": [\"Column\", \"ColumnReverse\", \"Row\", \"RowReverse\"],\n    \"Justify\": [\n        \"Auto\",\n        \"FlexStart\",\n        \"Center\",\n        \"FlexEnd\",\n        \"SpaceBetween\",\n        \"SpaceAround\",\n        \"SpaceEvenly\",\n        \"Stretch\",\n        \"Start\",\n        \"End\",\n    ],\n    \"Overflow\": [\"Visible\", \"Hidden\", \"Scroll\"],\n    \"Align\": [\n        \"Auto\",\n        \"FlexStart\",\n        \"Center\",\n        \"FlexEnd\",\n        \"Stretch\",\n        \"Baseline\",\n        \"SpaceBetween\",\n        \"SpaceAround\",\n        \"SpaceEvenly\",\n        \"Start\",\n        \"End\",\n    ],\n    \"PositionType\": [\"Static\", \"Relative\", \"Absolute\"],\n    \"Display\": [\"Flex\", \"None\", \"Contents\", \"Grid\"],\n    \"Wrap\": [\"NoWrap\", \"Wrap\", \"WrapReverse\"],\n    \"BoxSizing\": [\"BorderBox\", \"ContentBox\"],\n    \"MeasureMode\": [\"Undefined\", \"Exactly\", \"AtMost\"],\n    \"Dimension\": [\"Width\", \"Height\"],\n    \"Edge\": [\n        \"Left\",\n        \"Top\",\n        \"Right\",\n        \"Bottom\",\n        \"Start\",\n        \"End\",\n        \"Horizontal\",\n        \"Vertical\",\n        \"All\",\n    ],\n    \"NodeType\": [\"Default\", \"Text\"],\n    \"LogLevel\": [\"Error\", \"Warn\", \"Info\", \"Debug\", \"Verbose\", \"Fatal\"],\n    \"ExperimentalFeature\": [\n        # Mimic web flex-basis behavior (experiment may be broken)\n        \"WebFlexBasis\",\n        # Fix flex basis computation to not apply FitContent constraint in the\n        # main axis for non-measure container nodes\n        \"FixFlexBasisFitContent\",\n    ],\n    \"Gutter\": [\"Column\", \"Row\", \"All\"],\n    \"GridTrackType\": [\"Auto\", \"Points\", \"Percent\", \"Fr\", \"Minmax\"],\n    # Known incorrect behavior which can be enabled for compatibility\n    \"Errata\": [\n        # Default: Standards conformant mode\n        (\"None\", 0),\n        # Allows main-axis flex basis to be stretched without flexGrow being\n        # set (previously referred to as \"UseLegacyStretchBehaviour\")\n        (\"StretchFlexBasis\", 1 << 0),\n        # Absolute position in a given axis will be relative to the padding\n        # edge of the parent container instead of the content edge when a\n        # specific inset (top/bottom/left/right) is not set.\n        (\"AbsolutePositionWithoutInsetsExcludesPadding\", 1 << 1),\n        # Absolute nodes will resolve percentages against the inner size of\n        # their containing node, not the padding box\n        (\"AbsolutePercentAgainstInnerSize\", 1 << 2),\n        # Enable all incorrect behavior (preserve compatibility)\n        (\"All\", 0x7FFFFFFF),\n        # Enable all errata except for \"StretchFlexBasis\" (Defaults behavior\n        # before Yoga 2.0)\n        (\"Classic\", 0x7FFFFFFF & (~(1 << 0))),\n    ],\n}\n\n# Temporary filter enums to not upgrade all enums at once\nKOTLIN_ENUM_NAMES = {\"Direction\"}\n\nENUMS_KOTLIN = {name: ENUMS[name] for name in KOTLIN_ENUM_NAMES}\nENUMS_JAVA = {\n    name: values for name, values in ENUMS.items() if name not in KOTLIN_ENUM_NAMES\n}\n\nDO_NOT_STRIP = [\"LogLevel\"]\n\nBITSET_ENUMS = [\"Errata\"]\n\n\ndef get_license(ext):\n    return f\"\"\"{\"/**\" if ext == \"js\" else \"/*\"}\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @{\"generated\"} by enums.py\n{\"// clang-format off\" if ext == \"cpp\" else \"\"}\n\"\"\"\n\n\ndef _format_name(symbol, delimiter=None, transform=None):\n    symbol = str(symbol)\n    out = \"\"\n    for i in range(0, len(symbol)):\n        c = symbol[i]\n        if str.istitle(c) and i != 0 and not str.istitle(symbol[i - 1]):\n            out += delimiter or \"\"\n        if transform is None:\n            out += c\n        else:\n            out += getattr(c, transform)()\n    return out\n\n\ndef to_java_upper(symbol):\n    return _format_name(symbol, \"_\", \"upper\")\n\n\ndef to_kotlin_upper(symbol):\n    return _format_name(symbol, \"_\", \"upper\")\n\n\ndef to_hyphenated_lower(symbol):\n    return _format_name(symbol, \"-\", \"lower\")\n\n\nroot = os.path.dirname(os.path.abspath(__file__))\n\n# write out C & Objective-C headers\nwith open(root + \"/yoga/YGEnums.h\", \"w\") as f:\n    f.write(get_license(\"cpp\"))\n    f.write(\"#pragma once\\n\")\n    f.write(\"#include <yoga/YGMacros.h>\\n\\n\")\n\n    f.write(\"YG_EXTERN_C_BEGIN\\n\\n\")\n    items = sorted(ENUMS.items())\n    for name, values in items:\n        f.write(\"YG_ENUM_DECL(\\n\")\n\n        f.write(\"    YG%s,\\n\" % name)\n        for value in values:\n            if isinstance(value, tuple):\n                f.write(\"    YG%s%s = %d\" % (name, value[0], value[1]))\n            else:\n                f.write(\"    YG%s%s\" % (name, value))\n            if value == values[-1]:\n                f.write(\")\\n\")\n            else:\n                f.write(\",\\n\")\n        if name in BITSET_ENUMS:\n            f.write(\"YG_DEFINE_ENUM_FLAG_OPERATORS(YG%s)\\n\" % name)\n        f.write(\"\\n\")\n    f.write(\"YG_EXTERN_C_END\\n\")\n\n# Write out C++ scoped enums\nfor name, values in sorted(ENUMS.items()):\n    with open(f\"{root}/yoga/enums/{name}.h\", \"w\") as f:\n        f.write(get_license(\"cpp\"))\n        f.write(\"#pragma once\\n\\n\")\n\n        f.write(\"#include <cstdint>\\n\")\n        f.write(\"#include <yoga/YGEnums.h>\\n\")\n        f.write(\"#include <yoga/enums/YogaEnums.h>\\n\\n\")\n\n        f.write(\"namespace facebook::yoga {\\n\\n\")\n\n        width = \"uint32_t\" if name in BITSET_ENUMS else \"uint8_t\"\n        f.write(f\"enum class {name} : {width} {{\\n\")\n        for value in values:\n            ordinal = value[0] if isinstance(value, tuple) else value\n            f.write(f\"  {ordinal} = YG{name}{ordinal},\\n\")\n        f.write(\"};\\n\\n\")\n\n        if name in BITSET_ENUMS:\n            f.write(f\"YG_DEFINE_ENUM_FLAG_OPERATORS({name})\\n\\n\")\n        else:\n            f.write(\"template <>\\n\")\n            f.write(f\"constexpr int32_t ordinalCount<{name}>() {{\\n\")\n            f.write(f\"  return {len(values)};\\n\")\n            f.write(\"}\\n\\n\")\n\n        f.write(f\"constexpr {name} scopedEnum(YG{name} unscoped) {{\\n\")\n        f.write(f\"  return static_cast<{name}>(unscoped);\\n\")\n        f.write(\"}\\n\\n\")\n\n        f.write(f\"constexpr YG{name} unscopedEnum({name} scoped) {{\\n\")\n        f.write(f\"  return static_cast<YG{name}>(scoped);\\n\")\n        f.write(\"}\\n\\n\")\n\n        f.write(f\"inline const char* toString({name} e) {{\\n\")\n        f.write(f\"  return YG{name}ToString(unscopedEnum(e));\\n\")\n        f.write(\"}\\n\\n\")\n\n        f.write(\"} // namespace facebook::yoga\\n\")\n\n# write out C body for printing\nwith open(root + \"/yoga/YGEnums.cpp\", \"w\") as f:\n    f.write(get_license(\"cpp\"))\n    f.write(\"#include <yoga/YGEnums.h>\\n\\n\")\n    items = sorted(ENUMS.items())\n    for name, values in items:\n        f.write(\"const char* YG%sToString(const YG%s value) {\\n\" % (name, name))\n        f.write(\"  switch (value) {\\n\")\n        for value in values:\n            if isinstance(value, tuple):\n                f.write(\"    case YG%s%s:\\n\" % (name, value[0]))\n                f.write('      return \"%s\";\\n' % to_hyphenated_lower(value[0]))\n            else:\n                f.write(\"    case YG%s%s:\\n\" % (name, value))\n                f.write('      return \"%s\";\\n' % to_hyphenated_lower(value))\n        f.write(\"  }\\n\")\n        f.write('  return \"unknown\";\\n')\n        f.write(\"}\\n\")\n        if name != items[-1][0]:\n            f.write(\"\\n\")\n\n# write out java files\nfor name, values in sorted(ENUMS_JAVA.items()):\n    with open(root + \"/java/com/facebook/yoga/Yoga%s.java\" % name, \"w\") as f:\n        f.write(get_license(\"java\"))\n        f.write(\"package com.facebook.yoga;\\n\\n\")\n        if name in DO_NOT_STRIP:\n            f.write(\"import com.facebook.yoga.annotations.DoNotStrip;\\n\\n\")\n            f.write(\"@DoNotStrip\\n\")\n        f.write(\"public enum Yoga%s {\\n\" % name)\n        if len(values) > 0:\n            for value in values:\n                if isinstance(value, tuple):\n                    f.write(\"  %s(%d)\" % (to_java_upper(value[0]), value[1]))\n                else:\n                    f.write(\"  %s(%d)\" % (to_java_upper(value), values.index(value)))\n                if values.index(value) is len(values) - 1:\n                    f.write(\";\\n\")\n                else:\n                    f.write(\",\\n\")\n        else:\n            f.write(\"__EMPTY(-1);\")\n        f.write(\"\\n\")\n        f.write(\"  private final int mIntValue;\\n\")\n        f.write(\"\\n\")\n        f.write(\"  Yoga%s(int intValue) {\\n\" % name)\n        f.write(\"    mIntValue = intValue;\\n\")\n        f.write(\"  }\\n\")\n        f.write(\"\\n\")\n        f.write(\"  public int intValue() {\\n\")\n        f.write(\"    return mIntValue;\\n\")\n        f.write(\"  }\\n\")\n        f.write(\"\\n\")\n        if name in DO_NOT_STRIP:\n            f.write(\"  @DoNotStrip\\n\")\n        f.write(\"  public static Yoga%s fromInt(int value) {\\n\" % name)\n        f.write(\"    switch (value) {\\n\")\n        for value in values:\n            if isinstance(value, tuple):\n                f.write(\n                    \"      case %d: return %s;\\n\" % (value[1], to_java_upper(value[0]))\n                )\n            else:\n                f.write(\n                    \"      case %d: return %s;\\n\"\n                    % (values.index(value), to_java_upper(value))\n                )\n        f.write(\n            '      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\\n'\n        )\n        f.write(\"    }\\n\")\n        f.write(\"  }\\n\")\n        f.write(\"}\\n\")\n\n# write out Kotlin files\nfor name, values in sorted(ENUMS_KOTLIN.items()):\n    with open(root + \"/java/com/facebook/yoga/Yoga%s.kt\" % name, \"w\") as f:\n        f.write(get_license(\"kotlin\"))\n        f.write(\"package com.facebook.yoga\\n\\n\")\n        f.write(\"public enum class Yoga%s(public val intValue: Int) {\\n\" % name)\n        if len(values) > 0:\n            for value in values:\n                if isinstance(value, tuple):\n                    f.write(\"  %s(%d)\" % (to_kotlin_upper(value[0]), value[1]))\n                else:\n                    f.write(\"  %s(%d)\" % (to_kotlin_upper(value), values.index(value)))\n                if values.index(value) is len(values) - 1:\n                    f.write(\";\\n\")\n                else:\n                    f.write(\",\\n\")\n        else:\n            f.write(\"__EMPTY(-1);\")\n        f.write(\"\\n\")\n        f.write(\"  public fun intValue(): Int = intValue\\n\")\n        f.write(\"\\n\")\n        f.write(\"  public companion object {\\n\")\n        f.write(\"    @JvmStatic\\n\")\n        f.write(\"    public fun fromInt(value: Int): Yoga%s =\\n\" % name)\n        f.write(\"        when (value) {\\n\")\n        for value in values:\n            if isinstance(value, tuple):\n                f.write(\"          %d -> %s\\n\" % (value[1], to_kotlin_upper(value[0])))\n            else:\n                f.write(\n                    \"          %d -> %s\\n\"\n                    % (values.index(value), to_kotlin_upper(value))\n                )\n        f.write(\n            '          else -> throw IllegalArgumentException(\"Unknown enum value: $value\")\\n'\n        )\n        f.write(\"        }\\n\")\n        f.write(\"  }\\n\")\n        f.write(\"}\\n\")\n\n# write out TypeScript file\nwith open(root + \"/javascript/src/generated/YGEnums.ts\", \"w\") as f:\n    f.write(get_license(\"js\"))\n    enums = sorted(ENUMS.items())\n    for enum_name, ordinals in enums:\n        f.write(f\"export enum {enum_name} {{\\n\")\n        for ordinal_index, ordinal in enumerate(ordinals):\n            ordinal_name = ordinal[0] if isinstance(ordinal, tuple) else ordinal\n            ordinal_value = ordinal[1] if isinstance(ordinal, tuple) else ordinal_index\n            f.write(f\"  {ordinal_name} = {ordinal_value},\\n\")\n\n        f.write(\"}\\n\\n\")\n\n    f.write(\"const constants = {\\n\")\n    for enum_name, ordinals in enums:\n        for ordinal in ordinals:\n            ordinal_name = ordinal[0] if isinstance(ordinal, tuple) else ordinal\n            ordinal_value = ordinal[1] if isinstance(ordinal, tuple) else ordinal_index\n            f.write(\n                f\"  {to_java_upper(enum_name)}_{to_java_upper(ordinal_name)}: {enum_name}.{ordinal_name},\\n\"\n            )\n\n    f.write(\"}\\n\")\n    f.write(\"export default constants\")\n"
  },
  {
    "path": "fuzz/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# If google/oss-fuzz has set the fuzzing engine\nif(DEFINED ENV{LIB_FUZZING_ENGINE})\n    set(FUZZING_ENGINE $ENV{LIB_FUZZING_ENGINE})\n    set(FUZZING_COMPILE_FLAGS \"\")\n    set(FUZZING_LINK_FLAGS \"${FUZZING_ENGINE}\")\nelse()\n    set(FUZZING_COMPILE_FLAGS \"-fsanitize=fuzzer\")\n    set(FUZZING_LINK_FLAGS \"-fsanitize=fuzzer\")\nendif()\n\nadd_executable(fuzz_layout FuzzLayout.cpp)\nset_target_properties(fuzz_layout PROPERTIES\n    COMPILE_FLAGS \"${FUZZING_COMPILE_FLAGS}\"\n    LINK_FLAGS \"${FUZZING_LINK_FLAGS}\"\n)\ntarget_link_libraries(fuzz_layout yogacore)\n"
  },
  {
    "path": "fuzz/FuzzLayout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fuzzer/FuzzedDataProvider.h>\n#include <yoga/Yoga.h>\n#include <cstdint>\n\nYGFlexDirection fuzzedFlexDirection(FuzzedDataProvider& fdp) {\n  return fdp.PickValueInArray({\n      YGFlexDirectionColumn,\n      YGFlexDirectionColumnReverse,\n      YGFlexDirectionRow,\n      YGFlexDirectionRowReverse,\n  });\n}\n\nvoid fillFuzzedTree(\n    FuzzedDataProvider& fdp,\n    YGConfigConstRef config,\n    YGNodeRef root,\n    size_t depth = 0) {\n  constexpr size_t kMaxDepth = 20;\n  constexpr size_t kMaxChildren = 20;\n\n  if (depth > kMaxDepth) {\n    return;\n  }\n\n  size_t children = fdp.ConsumeIntegralInRange<size_t>(0, kMaxChildren);\n  for (size_t i = 0; i < children; i++) {\n    YGNodeRef child = YGNodeNewWithConfig(config);\n    YGNodeStyleSetFlexDirection(root, fuzzedFlexDirection(fdp));\n    YGNodeStyleSetWidth(child, fdp.ConsumeFloatingPoint<float>());\n    YGNodeStyleSetGap(\n        child, YGGutterAll, fdp.ConsumeProbability<float>() * 100);\n    YGNodeStyleSetHeight(child, fdp.ConsumeFloatingPoint<float>());\n    YGNodeInsertChild(root, child, i);\n    fillFuzzedTree(fdp, config, child, depth + 1);\n  }\n}\n\nextern \"C\" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {\n  FuzzedDataProvider fdp(data, size);\n  YGConfigRef config = YGConfigNew();\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  fillFuzzedTree(fdp, config, root);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n  return 0;\n}\n"
  },
  {
    "path": "gentest/babel.config.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nmodule.exports = {\n  presets: ['@babel/preset-typescript'],\n};\n"
  },
  {
    "path": "gentest/fixtures/YGAbsolutePositionTest.html",
    "content": "<div id=\"absolute_layout_width_height_start_top\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width:10px; height: 10px; position: absolute; inset-inline-start: 10px; top: 10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_width_height_left_auto_right\" style=\"width: 100px; height: 100px\">\n  <div style=\"width: 10px; height: 10px; position: absolute; left: auto; right: 10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_width_height_left_right_auto\" style=\"width: 100px; height: 100px\">\n  <div style=\"width: 10px; height: 10px; position: absolute; left: 10px; right: auto;\"></div>\n</div>\n\n<div id=\"absolute_layout_width_height_left_auto_right_auto\" style=\"width: 100px; height: 100px\">\n  <div style=\"width: 10px; height: 10px; position: absolute; left: auto; right: auto;\"></div>\n</div>\n\n<div id=\"absolute_layout_width_height_end_bottom\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width:10px; height: 10px; position: absolute; inset-inline-end: 10px; bottom: 10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_start_top_end_bottom\" style=\"width: 100px; height: 100px;\">\n  <div style=\"position: absolute; inset-inline-start: 10px; top: 10px; inset-inline-end: 10px; bottom: 10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_width_height_start_top_end_bottom\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width:10px; height: 10px; position: absolute; inset-inline-start: 10px; top: 10px; inset-inline-end: 10px; bottom: 10px;\"></div>\n</div>\n\n<div id=\"do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent\"\n  style=\"height: 50px; width: 50px; overflow: hidden; flex-direction: row;\">\n  <div style=\"position: absolute; inset-inline-start: 0px; top: 0px;\">\n    <div style=\"width: 100px; height: 100px;\"></div>\n  </div>\n</div>\n\n<div id=\"absolute_layout_within_border\"\n  style=\"height:100px; width:100px; border-width: 10px; margin: 10px; padding: 10px;\">\n  <div style=\"position: absolute; width: 50px; height: 50px; left: 0px; top: 0px;\"></div>\n  <div style=\"position: absolute; width: 50px; height: 50px; right: 0px; bottom: 0px;\"></div>\n  <div style=\"position: absolute; width: 50px; height: 50px; left: 0px; top: 0px; margin: 10px;\"></div>\n  <div style=\"position: absolute; width: 50px; height: 50px; right: 0px; bottom: 0px; margin: 10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_center\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_flex_end\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: flex-end; justify-content: flex-end;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;\"></div>\n</div>\n\n<div id=\"absolute_layout_justify_content_center\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_center\" style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_center_on_child_only\" style=\"height: 100px; width: 110px; flex-grow: 1;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;align-self: center;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_center_and_top_position\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;top:10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_center_and_bottom_position\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;bottom:10px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_center_and_left_position\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;left:5px;\"></div>\n</div>\n\n<div id=\"absolute_layout_align_items_and_justify_content_center_and_right_position\"\n  style=\"height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;\">\n  <div style=\"position: absolute; width: 60px; height: 40px;right:5px;\"></div>\n</div>\n\n<div id=\"position_root_with_rtl_should_position_withoutdirection\" style=\"height: 52px; width: 52px; left: 72px; \">\n</div>\n\n<div id=\"absolute_layout_percentage_bottom_based_on_parent_height\" style=\"width: 100px; height: 200px;\">\n  <div style=\"position: absolute; top: 50%; width: 10px; height: 10px;\"></div>\n  <div style=\"position: absolute; bottom: 50%; width: 10px; height: 10px;\"></div>\n  <div style=\"position: absolute; top: 10%; width: 10px; bottom: 10%;\"></div>\n</div>\n\n<div id=\"absolute_layout_in_wrap_reverse_column_container\"\n  style=\"flex-direction:column; width:100px; height:100px; flex-wrap: wrap-reverse;\">\n  <div style=\"width:20px; height:20px; position: absolute;\"></div>\n</div>\n\n<div id=\"absolute_layout_in_wrap_reverse_row_container\"\n  style=\"flex-direction:row; width:100px; height:100px; flex-wrap: wrap-reverse;\">\n  <div style=\"width:20px; height:20px; position: absolute;\"></div>\n</div>\n\n<div id=\"absolute_layout_in_wrap_reverse_column_container_flex_end\"\n  style=\"flex-direction:column; width:100px; height:100px; flex-wrap: wrap-reverse;\">\n  <div style=\"width:20px; height:20px; position: absolute; align-self: flex-end;\"></div>\n</div>\n\n<div id=\"absolute_layout_in_wrap_reverse_row_container_flex_end\"\n  style=\"flex-direction:row; width:100px; height:100px; flex-wrap: wrap-reverse;\">\n  <div style=\"width:20px; height:20px; position: absolute; align-self: flex-end;\"></div>\n</div>\n\n<div id=\"percent_absolute_position_infinite_height\" style=\"flex-direction:column; width:300px;\">\n  <div style=\"width:300px; height:300;\"></div>\n  <div style=\"width:20%; height:20%; left:20%; top:20%; position: absolute;\"></div>\n</div>\n\n<div id=\"absolute_layout_percentage_height_based_on_padded_parent\"\n  style=\"flex-direction:column; width:100px; height:100px; padding-top: 10px; border-top: 10px solid black;\">\n  <div style=\"width:100px; height:50%; position: absolute;\"></div>\n</div>\n\n<div id=\"absolute_layout_percentage_height_based_on_padded_parent_and_align_items_center\"\n  style=\"position: relative; flex-direction:column; align-items:center; justify-content:center; width:100px; height:100px; padding-top:20px; padding-bottom:20px; \">\n  <div style=\"position:absolute; width:100px; height:50%;\"></div>\n</div>\n\n<div id=\"absolute_layout_padding_left\" style=\"width:200px; height:200px; padding-left:100px;\">\n  <div style=\"position:absolute; width:50px; height:50px;\"></div>\n</div>\n\n<div id=\"absolute_layout_padding_right\" style=\"width:200px; height:200px; padding-right:100px;\">\n  <div style=\"position:absolute; width:50px; height:50px;\"></div>\n</div>\n\n<div id=\"absolute_layout_padding_top\" style=\"width:200px; height:200px; padding-top:100px;\">\n  <div style=\"position:absolute; width:50px; height:50px;\"></div>\n</div>\n\n<div id=\"absolute_layout_padding_bottom\" style=\"width:200px; height:200px; padding-bottom:100px;\">\n  <div style=\"position:absolute; width:50px; height:50px;\"></div>\n</div>\n\n<div id=\"absolute_layout_padding\">\n  <div style=\"width:200px; height:200px; margin:10px; position: relative\">\n    <div style=\"position:static; width:200px; height:200px; padding: 50px;\">\n      <div style=\"position:absolute; width:50px; height:50px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"absolute_layout_border\">\n  <div style=\"width:200px; height:200px; margin:10px; position: relative\">\n    <div style=\"position:static; width:200px; height:200px; border: 10px solid black;\">\n      <div style=\"position:absolute; width:50px; height:50px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"absolute_layout_column_reverse_margin_border\"\n  style=\"width:200px; height:200px; flex-direction: column-reverse;\">\n  <div\n    style=\"position:absolute; width:50px; height:50px; left: 5px; right: 3px; margin-right: 4px; margin-left: 3px; border-right: 7px solid black; border-left: 1px solid black\">\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAlignContentTest.html",
    "content": "<!-- ALIGN CONTENT: FLEX-START -->\n\n<div id=\"align_content_flex_start_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: flex-start;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_flex_start_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: flex-start;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_flex_start_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: flex-start;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_flex_start_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: flex-start; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_flex_start_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: flex-start; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_flex_start_without_height_on_children\" style=\"width: 100px; height: 100px; flex-wrap: wrap; flex-direction: column; align-content: flex-start;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_flex_start_with_flex\" style=\"width: 100px; height: 120px; flex-wrap: wrap; flex-direction: column; align-content: flex-start;\">\n  <div style=\"width: 50px; flex: 1; flex-shrink: 0;\"></div>\n  <div style=\"width: 50px; flex: 1; height: 10px; flex-shrink: 0;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; flex: 1;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<!-- ALIGN CONTENT: FLEX-END -->\n\n<div id=\"align_content_flex_end_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: flex-end;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_flex_end_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: flex-end;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_flex_end_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: flex-end;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_flex_end_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: flex-end; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_flex_end_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: flex-end; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n\n<!-- ALIGN CONTENT: CENTER -->\n\n<div id=\"align_content_center_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: center;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_center_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: center;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_center_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: center;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_center_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: center; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_center_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: center; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<!-- ALIGN CONTENT: SPACE-BETWEEN -->\n\n<div id=\"align_content_space_between_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: space-between;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_between_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-between;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_space_between_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-between;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_between_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-between; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_space_between_wrapped_negative_space_row_reverse\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row-reverse; flex-wrap: wrap; align-content: space-between; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_space_between_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-between; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<!-- ALIGN CONTENT: SPACE-AROUND -->\n\n<div id=\"align_content_space_around_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: space-around;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_around_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-around;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_space_around_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-around;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_around_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-around; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_space_around_wrapped_negative_space_row_reverse\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row-reverse; flex-wrap: wrap; align-content: space-around; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_space_around_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-around; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n\n<!-- ALIGN CONTENT: SPACE-EVENLY -->\n\n<div id=\"align_content_space_evenly_nowrap\" style=\"width: 140px; height: 120px; flex-direction: row; align-content: space-evenly;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_wrap\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-evenly;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<!-- This tests the case where `flex-wrap: wrap` but the content does not actually wrap -->\n<div id=\"align_content_space_evenly_wrap_singleline\" style=\"width: 140px; height: 120px; flex-wrap: wrap; flex-direction: row; align-content: space-evenly;\">\n  <div style=\"width: 50px; height: 10px;\"></div>\n  <div style=\"width: 50px; height: 10px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_wrapped_negative_space\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-evenly; justify-content: center; height: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_space_evenly_wrapped_negative_space_gap\" style=\"display: flex; flex-direction: column; width: 320px; height: 320px; border-width: 60px;\">\n  <div style=\"display: flex; flex-direction: row; flex-wrap: wrap; align-content: space-evenly; justify-content: center; height: 10px; gap: 10px;\">\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n    <div style=\"width: 80%; height: 20px; flex-shrink: 0;\"></div>\n  </div>\n</div>\n\n\n<!-- ALIGN CONTENT: STRETCH -->\n\n<div id=\"align_content_stretch\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: column; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_children\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\">\n    <div style=\"flex: 1;\"></div>\n  </div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_flex\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; flex: 1;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; flex: 1;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_flex_no_shrink\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; flex: 1;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; flex: 1; flex-shrink: 0;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_margin\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; margin: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; margin: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_padding\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; padding: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; padding: 10px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_single_row\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_fixed_height\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; height: 60px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_max_height\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; max-height: 20px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_row_with_min_height\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row; align-content: stretch;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px; min-height: 80px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_column\" style=\"width: 100px; height: 150px; flex-wrap: wrap; flex-direction: column; align-content: stretch;\">\n  <div style=\"height: 50px;\">\n    <div style=\"flex: 1;\"></div>\n  </div>\n  <div style=\"height: 50px; flex: 1;\"></div>\n  <div style=\"height: 50px;\"></div>\n  <div style=\"height: 50px;\"></div>\n  <div style=\"height: 50px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_is_not_overriding_align_items\" style=\"align-content:stretch;\">\n  <div style=\"width:100px; height: 100px; align-items: center; flex-direction: row; align-content:stretch;\">\n    <div style=\"height: 10px; width: 10px; align-content:stretch;\"></div>\n  </div>\n</div>\n\n<div id=\"align_content_stretch_with_min_cross_axis\" style=\"width: 500px; min-height: 500px; flex-direction: row; flex-wrap: wrap; align-content: stretch;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_with_max_cross_axis\" style=\"width: 500px; max-height: 500px; flex-direction: row; flex-wrap: wrap; align-content: stretch;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_with_max_cross_axis_and_border_padding\" style=\"width: 500px; max-height: 500px; flex-direction: row; flex-wrap: wrap; align-content: stretch; border: solid black 5px; padding: 2px\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_with_min_cross_axis\" style=\"width: 500px; min-height: 500px; flex-direction: row; flex-wrap: wrap; align-content: space-evenly;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_with_max_cross_axis\" style=\"width: 500px; max-height: 500px; flex-direction: row; flex-wrap: wrap; align-content: space-evenly;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_with_max_cross_axis_violated\" style=\"width: 500px; max-height: 300px; flex-direction: row; flex-wrap: wrap; align-content: space-evenly;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_with_max_cross_axis_violated_padding_and_border\" style=\"width: 500px; max-height: 300px; flex-direction: row; flex-wrap: wrap; align-content: space-evenly; border: solid black 5px; padding: 2px\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"align_content_space_around_and_align_items_flex_end_with_flex_wrap\" style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: space-around;align-items: flex-end;\">\n  <div style=\"height: 50px; width: 150px;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n<div id=\"align_content_space_around_and_align_items_center_with_flex_wrap\" style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: space-around;align-items: center;\">\n  <div style=\"height: 50px; width: 150px;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n<div id=\"align_content_space_around_and_align_items_flex_start_with_flex_wrap\" style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: space-around;align-items: flex-start;\">\n  <div style=\"height: 50px; width: 150px;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n<div id=\"align_content_flex_start_stretch_doesnt_influence_line_box_dim\" style=\"width: 400px; flex-direction: row; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px;\">\n  <div style=\"height: 100px; width: 100px; margin-right: 20px;\"></div>\n  <div style=\"flex-direction: row; flex-wrap: wrap; flex-shrink: 1; flex-grow: 1; align-content: flex-start;\">\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n  </div>\n  <div style=\"height: 50px; width: 50px; margin-left: 20px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_stretch_does_influence_line_box_dim\" style=\"width: 400px; flex-direction: row; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px;\">\n  <div style=\"height: 100px; width: 100px; margin-right: 20px;\"></div>\n  <div style=\"flex-direction: row; flex-wrap: wrap; flex-shrink: 1; flex-grow: 1; align-content: stretch;\">\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n  </div>\n  <div style=\"height: 50px; width: 50px; margin-left: 20px;\"></div>\n</div>\n\n<div id=\"align_content_space_evenly_stretch_does_influence_line_box_dim\" style=\"width: 400px; flex-direction: row; padding-top: 20px; padding-bottom: 20px; padding-left: 20px; padding-right: 20px;\">\n  <div style=\"height: 100px; width: 100px; margin-right: 20px;\"></div>\n  <div style=\"flex-direction: row; flex-wrap: wrap; flex-shrink: 1; flex-grow: 1; align-content: stretch;\">\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n    <div style=\"height: 30px; width: 30px; margin-right: 20px;\"></div>\n  </div>\n  <div style=\"height: 50px; width: 50px; margin-left: 20px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_and_align_items_flex_end_with_flex_wrap\"\n  style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: stretch;align-items: flex-end;\">\n  <div style=\"height: 50px; width: 150px; align-self: flex-start;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n\n<div id=\"align_content_stretch_and_align_items_flex_start_with_flex_wrap\"\n  style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: stretch;align-items: flex-start;\">\n  <div style=\"height: 50px; width: 150px; align-self: flex-end;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_and_align_items_center_with_flex_wrap\"\n  style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: stretch;align-items: center;\">\n  <div style=\"height: 50px; width: 150px; align-self: flex-end;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n\n<div id=\"align_content_stretch_and_align_items_stretch_with_flex_wrap\"\n  style=\"width: 300px; height: 300px; flex-direction: row; flex-wrap: wrap; align-content: stretch;align-items: stretch;\">\n  <div style=\"height: 50px; width: 150px; align-self: flex-end;\"></div>\n  <div style=\"height: 100px; width: 120px;\"></div>\n  <div style=\"height: 50px; width: 120px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAlignItemsTest.html",
    "content": "<div id=\"align_items_stretch\" style=\"width: 100px; height: 100px;\">\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"align_items_center\" style=\"width: 100px; height: 100px; align-items: center;\">\n  <div style=\"height: 10px; width: 10px;\"></div>\n</div>\n\n<div id=\"align_items_flex_start\" style=\"width: 100px; height: 100px; align-items: flex-start;\">\n  <div style=\"height: 10px; width: 10px;\"></div>\n</div>\n\n<div id=\"align_items_flex_end\" style=\"width: 100px; height: 100px; align-items: flex-end;\">\n  <div style=\"height: 10px; width: 10px;\"></div>\n</div>\n\n<div id=\"align_baseline\" style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;\"></div>\n</div>\n\n<div id=\"align_baseline_child\" style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_child_multiline\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 60px;\"></div>\n  <div style=\"width: 50px; height: 25px;flex-wrap:wrap;flex-direction:row;\">\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;\"></div>\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_child_multiline_override\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 60px;\"></div>\n  <div style=\"width: 50px; height: 25px;flex-wrap:wrap;flex-direction:row;\">\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;align-self:baseline;\"></div>\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;align-self:baseline;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_child_multiline_no_override_on_secondline\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 60px;\"></div>\n  <div style=\"width: 50px; height: 25px;flex-wrap:wrap;flex-direction:row;\">\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;\"></div>\n    <div style=\"width: 25px; height: 20px;\"></div>\n    <div style=\"width: 25px; height: 10px;align-self:baseline;\"></div>\n  </div>\n</div>\n\n\n<div id=\"align_baseline_child_top\" style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;top:10px;\"></div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_child_top2\" style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;top:5px\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_double_nested_child\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\">\n    <div style=\"width: 50px; height: 20px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 15px;\"></div>\n  </div>\n</div>\n\n\n<div id=\"align_baseline_column\" style=\"width: 100px; height: 100px; flex-direction:column; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;\"></div>\n</div>\n\n<div id=\"align_baseline_child_margin\" style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;margin: 5px;\"></div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 10px;margin: 1px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_child_padding\"\n  style=\"width: 100px; height: 100px; padding:5px; flex-direction:row; align-items: baseline;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;padding:5px;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_baseline_multiline\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;flex-wrap:wrap;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<!-- TODO: Yoga's behavior is no longer in line with Chromium  -->\n<div id=\"align_baseline_multiline_column\" data-disabled=\"true\"\n  style=\"width: 100px; height: 100px; flex-direction:column; align-items: baseline;flex-wrap:wrap;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 30px; height: 50px;\">\n    <div style=\"width: 20px; height: 20px;\"></div>\n  </div>\n  <div style=\"width: 40px; height: 70px;\">\n    <div style=\"width: 10px; height: 10px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;\"></div>\n</div>\n\n<!-- TODO: Yoga's behavior is no longer in line with Chromium  -->\n<div id=\"align_baseline_multiline_column2\" data-disabled=\"true\"\n  style=\"width: 100px; height: 100px; flex-direction:column; align-items: baseline;flex-wrap:wrap;\">\n  <div style=\"width: 50px; height: 50px;flex-direction:column;\"></div>\n  <div style=\"width: 30px; height: 50px;flex-direction:column;\">\n    <div style=\"width: 20px; height: 20px;flex-direction:column;\"></div>\n  </div>\n  <div style=\"width: 40px; height: 70px;flex-direction:column;\">\n    <div style=\"width: 10px; height: 10px;flex-direction:column;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;flex-direction:column;\"></div>\n</div>\n\n<div id=\"align_baseline_multiline_row_and_column\"\n  style=\"width: 100px; height: 100px; flex-direction:row; align-items: baseline;flex-wrap:wrap;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 50px;flex-direction:column;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;flex-direction:column;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n  <div style=\"width: 50px; height: 20px;\"></div>\n</div>\n\n<div id=\"align_items_center_child_with_margin_bigger_than_parent\"\n  style=\"height: 52px; width: 52px; align-items: center; justify-content: center;\">\n  <div style=\"align-items: center;\">\n    <div style=\"width: 52px; height: 52px; margin-left: 10px; margin-right: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_items_flex_end_child_with_margin_bigger_than_parent\"\n  style=\"height: 52px; width: 52px; align-items: center; justify-content: center;\">\n  <div style=\"align-items: flex-end;\">\n    <div style=\"width: 52px; height: 52px; margin-left: 10px; margin-right: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_items_center_child_without_margin_bigger_than_parent\"\n  style=\"height: 52px; width: 52px; align-items: center; justify-content: center;\">\n  <div style=\"align-items: center;\">\n    <div style=\"width: 72px; height: 72px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_items_flex_end_child_without_margin_bigger_than_parent\"\n  style=\"height: 52px; width: 52px; align-items: center; justify-content: center;\">\n  <div style=\"align-items: flex-end;\">\n    <div style=\"width: 72px; height: 72px;\"></div>\n  </div>\n</div>\n\n<div id=\"align_center_should_size_based_on_content\"\n  style=\"width: 100px; height: 100px; align-items: center; margin-top: 20px;\">\n  <div style=\"flex-grow: 0; flex-shrink: 1; justify-content: center;\">\n    <div style=\"flex-grow: 1; flex-shrink: 1;\">\n      <div style=\"width: 20px; height: 20px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"align_stretch_should_size_based_on_parent\"\n  style=\"width: 100px; height: 100px; align-items: stretch; margin-top: 20px;\">\n  <div style=\"flex-grow: 0; flex-shrink: 1; justify-content: center;\">\n    <div style=\"flex-grow: 1; flex-shrink: 1;\">\n      <div style=\"width: 20px; height: 20px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"align_flex_start_with_shrinking_children\" style=\"height: 500px; width: 500px\">\n  <div style=\"align-items: flex-start;\">\n    <div style=\"flex-grow: 1; flex-shrink: 1;\">\n      <div style=\"flex-grow: 1; flex-shrink: 1;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"align_flex_start_with_stretching_children\" style=\"height: 500px; width: 500px\">\n  <div style=\"align-items: stretch;\">\n    <div style=\"flex-grow: 1; flex-shrink: 1;\">\n      <div style=\"flex-grow: 1; flex-shrink: 1;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"align_flex_start_with_shrinking_children_with_stretch\" style=\"height: 500px; width: 500px\">\n  <div style=\"align-items: flex-start;\">\n    <div style=\"flex-grow: 1; flex-shrink: 1; align-items: stretch;\">\n      <div style=\"flex-grow: 1; flex-shrink: 1;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"align_flex_end_with_row_reverse\"\n  style=\"width: 100px; height: 75px; align-items: flex-end; flex-direction: column; flex-wrap: wrap;\">\n  <div style=\"position:relative; width:50px; height:50px; margin-right: 5px; margin-left: 3px;\">\n  </div>\n  <div style=\"position:relative; width:50px; height:50px;\">\n  </div>\n</div>\n\n<div id=\"align_stretch_with_row_reverse\"\n  style=\"width: 100px; height: 75px; align-items: stretch; flex-direction: column; flex-wrap: wrap;\">\n  <div style=\"position:relative; width:50px; height:50px; margin-right: 5px; margin-left: 3px;\">\n  </div>\n  <div style=\"position:relative; width:50px; height:50px;\">\n  </div>\n</div>\n\n<div id=\"align_items_non_stretch_s526008\"\n  style=\"flex-direction: column; width: 400px; height: 400px;\">\n  <div style=\"flex-direction: row;\">\n    <div style=\"flex-direction: column; align-items: flex-start;\">\n      <div>\n        <div style=\"width: 0; height: 10px;\"></div>\n      </div>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAlignSelfTest.html",
    "content": "<div id=\"align_self_center\" style=\"width:100px; height: 100px;\">\n  <div style=\"height: 10px; width: 10px; align-self: center;\"></div>\n</div>\n\n<div id=\"align_self_flex_end\" style=\"width:100px; height: 100px;\">\n  <div style=\"height: 10px; width: 10px; align-self: flex-end;\"></div>\n</div>\n\n<div id=\"align_self_flex_start\" style=\"width:100px; height: 100px;\">\n  <div style=\"height: 10px; width: 10px; align-self: flex-start;\"></div>\n</div>\n\n<div id=\"align_self_flex_end_override_flex_start\" style=\"width:100px; height: 100px; align-items: flex-start;\">\n  <div style=\"height: 10px; width: 10px; align-self: flex-end;\"></div>\n</div>\n\n\n<div id=\"align_self_baseline\" style=\"width: 100px; height: 100px; flex-direction:row;\">\n  <div style=\"width: 50px; height: 50px;align-self: baseline;\"></div>\n  <div style=\"width: 50px; height: 20px;align-self: baseline;\">\n    <div style=\"width: 50px; height: 10px;\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAndroidNewsFeed.html",
    "content": "<div id=\"android_news_feed\" layout=\"width: 1080; height: 444; top: 0; left: 0;\" style=\"align-content: stretch; flex-shrink: 0; width: 1080px; \" >\n  <div layout=\"width: 1080; height: 444; top: 0; left: 0;\" style=\"flex-shrink: 0; \" >\n    <div layout=\"width: 1080; height: 444; top: 0; left: 0;\" style=\"align-content: stretch; \" >\n      <div layout=\"width: 1080; height: 226; top: 0; left: 0;\" style=\"align-content: stretch; \" >\n        <div layout=\"width: 1044; height: 202; top: 24; left: 36;\" style=\"flex-direction: row; align-items: flex-start; align-content: stretch; margin-top: 24px; margin-inline-start: 36px; \" >\n          <div layout=\"width: 120; height: 120; top: 0; left: 0;\" style=\"flex-direction: row; align-content: stretch; flex-shrink: 0; \" >\n            <div layout=\"width: 120; height: 120; top: 0; left: 0;\" style=\"align-content: stretch; flex-shrink: 0; width: 120px; height: 120px; \" has-custom-measure=\"true\"></div>\n          </div>\n          <div layout=\"width: 870; height: 202; top: 0; left: 138;\" style=\"align-content: stretch; flex-shrink: 1; margin-right: 36px; padding-left: 36px; padding-top: 21px; padding-right: 36px; padding-bottom: 18px; \" >\n            <div layout=\"width: 798; height: 49; top: 21; left: 36;\" style=\"flex-direction: row; align-content: stretch; flex-shrink: 1; \" has-custom-measure=\"true\"></div>\n            <div layout=\"width: 798; height: 114; top: 70; left: 36;\" style=\"align-content: stretch; flex-shrink: 1; \" has-custom-measure=\"true\"></div>\n          </div>\n        </div>\n      </div>\n      <div layout=\"width: 1080; height: 218; top: 226; left: 0;\" style=\"align-content: stretch; \" >\n        <div layout=\"width: 906; height: 194; top: 24; left: 174;\" style=\"flex-direction: row; align-items: flex-start; align-content: stretch; margin-top: 24px; margin-inline-start: 174px; \" >\n          <div layout=\"width: 72; height: 72; top: 12; left: 0;\" style=\"flex-direction: row; align-content: stretch; flex-shrink: 0; \" >\n            <div layout=\"width: 72; height: 72; top: 0; left: 0;\" style=\"align-content: stretch; flex-shrink: 0; width: 72px; height: 72px; \" has-custom-measure=\"true\"></div>\n          </div>\n          <div layout=\"width: 780; height: 194; top: 0; left: 90;\" style=\"align-content: stretch; flex-shrink: 1; margin-right: 36px; padding-left: 36px; padding-top: 21px; padding-right: 36px; padding-bottom: 18px; \" >\n            <div layout=\"width: 708; height: 49; top: 21; left: 36;\" style=\"flex-direction: row; align-content: stretch; flex-shrink: 1; \" has-custom-measure=\"true\"></div>\n            <div layout=\"width: 708; height: 106; top: 70; left: 36;\" style=\"align-content: stretch; flex-shrink: 1; \" has-custom-measure=\"true\"></div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAspectRatioTest.html",
    "content": "<!-- TODO: aspect-ratio behavior is inconsistent with Web -->\n<div id=\"aspect_ratio_does_not_stretch_cross_axis_dim\" data-disabled=\"true\" style=\"width: 300px; height: 300px;\">\n  <div style=\"flex: 1; overflow: scroll;\">\n    <div style=\"flex-direction: row;\">\n      <div style=\"flex: 2; aspect-ratio: 1;\"></div>\n      <div style=\"width: 5px\"></div>\n      <div style=\"flex: 1\">\n        <div style=\"flex: 1; aspect-ratio: 1;\">\n          <div style=\"width: 5px\"></div>\n          <div style=\"flex: 1; aspect-ratio: 1;\"></div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<div id=\"zero_aspect_ratio_behaves_like_auto\" style=\"width: 300px; height: 300px;\">\n  <div style=\"aspect-ratio: 0; width: 50px\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGAutoTest.html",
    "content": "<div id=\"auto_width\" style=\"width: auto; height: 50px; flex-direction: row;\">\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n</div>\n\n<div id=\"auto_height\" style=\"width: 50px; height: auto;\">\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n</div>\n\n<div id=\"auto_flex_basis\" style=\"width: 50px; flex-basis: auto;\">\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n  <div style=\"width: 50px; height: 50px\"></div>\n</div>\n\n<div id=\"auto_position\" style=\"width: 50px; height: 50px;\">\n  <div style=\"width: 25px; height: 25px; right: auto\"></div>\n</div>\n\n<div id=\"auto_margin\" style=\"width: 50px; height: 50px;\">\n  <div style=\"width: 25px; height: 25px; margin-left: auto\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGBorderTest.html",
    "content": "<div id=\"border_no_size\" style=\"border-width: 10px;\">\n</div>\n\n<div id=\"border_container_match_child\" style=\"border-width: 10px;\">\n  <div style=\"width: 10px; height: 10px;\"></div>\n</div>\n\n<div id=\"border_flex_child\" style=\"width: 100px; height: 100px; border-width: 10px;\">\n  <div style=\"width: 10px; flex-grow:1\"></div>\n</div>\n\n<div id=\"border_stretch_child\" style=\"width: 100px; height: 100px; border-width: 10px;\">\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"border_center_child\" style=\"width: 100px; height: 100px; border-inline-start-width: 10px; border-top-width: 10; border-inline-end-width: 20px; border-bottom-width: 20px; align-items: center; justify-content: center;\">\n  <div style=\"height: 10px; width: 10px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGBoxSizingTest.html",
    "content": "<div id=\"box_sizing_content_box_simple\"\n  style=\"width: 100px; height: 100px; padding: 5px; border-width: 10px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_simple\"\n  style=\"width: 100px; height: 100px; padding: 5px; border-width: 10px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_content_box_percent\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50%; height: 25%; padding: 4px; border-width: 16px; box-sizing: content-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_percent\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50%; height: 25%; padding: 4px; border-width: 16px; box-sizing: border-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_absolute\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50; height: 25%; padding: 12px; border-width: 8px; box-sizing: content-box; position: absolute;\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_absolute\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50; height: 25%; padding: 12px; border-width: 8px; box-sizing: border-box; position: absolute;\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_comtaining_block\"\n  style=\"width: 100px; height: 100px; padding: 12px; border-width: 8px; box-sizing: content-box; \">\n  <div style=\"width: 75; height: 75; position: static;\">\n    <div style=\"width: 50px; height: 25%; position: absolute;\">\n    </div>\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_comtaining_block\"\n  style=\"width: 100px; height: 100px;  padding: 12px; border-width: 8px; box-sizing: border-box; \">\n  <div style=\"width: 75; height: 75; position: static;\">\n    <div style=\"width: 50px; height: 25%; position: absolute;\">\n    </div>\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_padding_only\"\n  style=\"width: 100px; height: 100px; padding: 5px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_content_box_padding_only_percent\" style=\"width: 100px; height: 150px;\">\n  <div style=\"width: 50px; height: 75px; padding: 10%; box-sizing: content-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_padding_only\" style=\"width: 100px; height: 100px; padding: 5px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_border_box_padding_only_percent\" style=\"width: 100px; height: 150px;\">\n  <div style=\"width: 50px; height: 75px; padding: 10%; box-sizing: border-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_border_only\"\n  style=\"width: 100px; height: 100px; border-width: 10px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_content_box_border_only_percent\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50%; height: 75; border-width: 10%; box-sizing: content-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_border_only\"\n  style=\"width: 100px; height: 100px; border-width: 10px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_border_box_border_only_percent\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50%; height: 75; border-width: 10%; box-sizing: border-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_no_padding_no_border\" style=\"width: 100px; height: 100px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_no_padding_no_border\" style=\"width: 100px; height: 100px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_content_box_children\"\n  style=\"width: 100px; height: 100px; padding: 5px; border-width: 10px; box-sizing: content-box\">\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_children\"\n  style=\"width: 100px; height: 100px; padding: 5px; border-width: 10px; box-sizing: border-box\">\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_siblings\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px; box-sizing: content-box; padding: 10px; border-width: 10px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_siblings\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px; box-sizing: border-box; padding: 10px; border-width: 10px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_max_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"max-width: 50px; height: 25px; box-sizing: content-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_max_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"max-width: 50px; height: 25px; box-sizing: border-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_max_height\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50px; max-height: 50px; box-sizing: content-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_max_height\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50px; max-height: 50px; box-sizing: border-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_min_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"min-width: 50px; height: 25px; box-sizing: content-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_min_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"min-width: 50px; height: 25px; box-sizing: border-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_min_height\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50px; min-height: 50px; box-sizing: content-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_border_box_min_height\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 50px; min-height: 50px; box-sizing: border-box; padding: 5px; border-width: 15px\"></div>\n  <div style=\"width: 25px; height: 25px\"></div>\n</div>\n\n<div id=\"box_sizing_content_box_no_height_no_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"box-sizing: content-box; padding: 2px; border-width: 7px\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_no_height_no_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"box-sizing: border-box; padding: 2px; border-width: 7px\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_nested\"\n  style=\"width: 100px; height: 100px; box-sizing: content-box; padding: 15px; border-width: 3px;\">\n  <div style=\"width: 20px; height: 20px; box-sizing: content-box; padding: 2px; border-width: 7px\">\n    <div style=\"width: 10px; height: 5px; box-sizing: content-box; padding: 1px; border-width: 2px\"></div>\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_nested\"\n  style=\"width: 100px; height: 100px; box-sizing: border-box; padding: 15px; border-width: 3px;\">\n  <div style=\"width: 20px; height: 20px; box-sizing: border-box; padding: 2px; border-width: 7px\">\n    <div style=\"width: 10px; height: 5px; box-sizing: border-box; padding: 1px; border-width: 2px\"></div>\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_nested_alternating\"\n  style=\"width: 100px; height: 100px; box-sizing: content-box; padding: 3px; border-width: 2px;\">\n  <div style=\"width: 40px; height: 40px; box-sizing: border-box; padding: 8px; border-width: 2px\">\n    <div style=\"width: 20px; height: 25px; box-sizing: content-box; padding: 3px; border-width: 6px\">\n      <div style=\"width: 10px; height: 5px; box-sizing: border-box; padding: 1px; border-width: 1px\">\n      </div>\n    </div>\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_nested_alternating\"\n  style=\"width: 100px; height: 100px; box-sizing: border-box; padding: 3px; border-width: 2px;\">\n  <div style=\"width: 40px; height: 40px; box-sizing: content-box; padding: 8px; border-width: 2px\">\n    <div style=\"width: 20px; height: 25px; box-sizing: border-box; padding: 3px; border-width: 6px\">\n      <div style=\"width: 10px; height: 5px; box-sizing: content-box; padding: 1px; border-width: 1px\">\n      </div>\n    </div>\n  </div>\n</div>\n\n<div data-disabled=\"true\" id=\"box_sizing_content_box_flex_basis_row\"\n  style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex-basis: 50px; height: 25px; padding: 5px; border-width: 10px; box-sizing: content-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_flex_basis_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex-basis: 50px; height: 25px; padding: 5px; border-width: 10px; box-sizing: border-box\">\n  </div>\n</div>\n\n<div data-disabled=\"true\" id=\"box_sizing_content_box_flex_basis_column\"\n  style=\"width: 100px; height: 100px; flex-direction: column;\">\n  <div style=\"flex-basis: 50px; height: 25px; padding: 5px; border-width: 10px; box-sizing: content-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_border_box_flex_basis_column\" style=\"width: 100px; height: 100px; flex-direction: column;\">\n  <div style=\"flex-basis: 50px; height: 25px; padding: 5px; border-width: 10px; box-sizing: border-box\">\n  </div>\n</div>\n\n<div id=\"box_sizing_content_box_padding_start\"\n  style=\"width: 100px; height: 100px; padding-inline-start: 5px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_padding_start\"\n  style=\"width: 100px; height: 100px; padding-inline-start: 5px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_content_box_padding_end\"\n  style=\"width: 100px; height: 100px; padding-inline-end: 5px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_padding_end\"\n  style=\"width: 100px; height: 100px; padding-inline-end: 5px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_content_box_border_start\"\n  style=\"width: 100px; height: 100px; border-inline-start-width: 5px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_border_start\"\n  style=\"width: 100px; height: 100px; border-inline-start-width: 5px; box-sizing: border-box\">\n</div>\n\n<div id=\"box_sizing_content_box_border_end\"\n  style=\"width: 100px; height: 100px; border-inline-end-width: 5px; box-sizing: content-box\">\n</div>\n\n<div id=\"box_sizing_border_box_border_end\"\n  style=\"width: 100px; height: 100px; border-inline-end-width: 5px; box-sizing: border-box\">\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGDimensionTest.html",
    "content": "<div id=\"wrap_child\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"wrap_grandchild\">\n  <div>\n    <div style=\"width: 100px; height: 100px;\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGDisplayTest.html",
    "content": "<div id=\"display_none\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1; display:none;\"></div>\n</div>\n\n<div id=\"display_none_fixed_size\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex-grow: 1;\"></div>\n  <div style=\"width: 20px; height: 20px; display:none;\"></div>\n</div>\n\n<div id=\"display_none_with_margin\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"width: 20px; height: 20px; display:none; margin: 10px;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"display_none_with_child\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n <div style=\"flex: 1;\"></div>\n <div style=\"flex: 1; display:none;\">\n   <div style=\"flex: 1; width: 20px;\"></div>\n </div>\n <div style=\"flex: 1;\"></div>\n</div>\n\n<div id=\"display_none_with_position\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1; display:none; top: 10px;\"></div>\n</div>\n\n<div id=\"display_none_with_position_absolute\" style=\"width: 100px; height: 100px;\">\n  <div style=\"display:none; position: absolute; width: 100px; height: 100px\"></div>\n</div>\n\n<div id=\"display_contents\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n</div>\n\n<div id=\"display_contents_fixed_size\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents; width: 50px; height: 50px;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n</div>\n\n<div id=\"display_contents_with_margin\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"width: 20px; height: 20px; display: contents; margin: 10px;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"display_contents_with_padding\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents; padding: 10px;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n</div>\n\n<div id=\"display_contents_with_position\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents; top: 10px;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n</div>\n\n<div id=\"display_contents_with_position_absolute\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents; position: absolute; width: 50px; height: 50px;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n</div>\n\n<div id=\"display_contents_nested\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"display: contents;\">\n    <div style=\"display: contents;\">\n      <div style=\"flex: 1; height: 10px;\"></div>\n      <div style=\"flex: 1; height: 20px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"display_contents_with_siblings\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex: 1; height: 30px;\"></div>\n  <div style=\"display: contents;\">\n    <div style=\"flex: 1; height: 10px;\"></div>\n    <div style=\"flex: 1; height: 20px;\"></div>\n  </div>\n  <div style=\"flex: 1; height: 30px;\"></div>\n</div>"
  },
  {
    "path": "gentest/fixtures/YGFlexBasisFitContentTest.html",
    "content": "<!-- Container child with content overflowing definite column parent.\n     Flex basis uses content size regardless of ExperimentalFeature state,\n     because FitContent and MaxContent produce the same result for containers. -->\n<div id=\"container_child_overflows_definite_parent_column\"\n     style=\"width: 200px; height: 300px;\">\n  <div>\n    <div style=\"height: 500px; width: 50px;\"></div>\n  </div>\n</div>\n\n<!-- Row variant: container child overflows definite row parent. -->\n<div id=\"container_child_overflows_definite_parent_row\"\n     style=\"width: 300px; height: 200px; flex-direction: row;\">\n  <div>\n    <div style=\"width: 500px; height: 50px;\"></div>\n  </div>\n</div>\n\n<!-- Container child content fits within parent bounds.\n     Same behavior with and without feature (no capping needed). -->\n<div id=\"container_child_within_bounds_column\"\n     style=\"width: 200px; height: 300px;\">\n  <div>\n    <div style=\"height: 100px; width: 50px;\"></div>\n  </div>\n</div>\n\n<!-- Multiple container children, both overflowing definite column parent. -->\n<div id=\"multiple_container_children_overflow_column\"\n     style=\"width: 200px; height: 300px;\">\n  <div>\n    <div style=\"height: 400px;\"></div>\n  </div>\n  <div>\n    <div style=\"height: 500px;\"></div>\n  </div>\n</div>\n\n<!-- Scroll container: children always use MaxContent in main axis.\n     Same behavior with and without feature. -->\n<div id=\"scroll_container_column\"\n     style=\"width: 200px; height: 300px; overflow: scroll;\">\n  <div>\n    <div style=\"height: 500px;\"></div>\n  </div>\n</div>\n\n<!-- Mix of explicit-height child and overflowing container child. -->\n<div id=\"explicit_and_container_children_column\"\n     style=\"width: 200px; height: 300px;\">\n  <div style=\"height: 100px;\"></div>\n  <div>\n    <div style=\"height: 500px;\"></div>\n  </div>\n</div>\n\n<!-- Items with flex-basis inside a scroll container's auto-height\n     content container. With FixFlexBasisFitContent, flex-basis is\n     respected even when the content container's main axis size is\n     indefinite (NaN). Without the feature, flex-basis would be ignored. -->\n<div id=\"flex_basis_in_scroll_content_container\"\n     data-experiments=\"FixFlexBasisFitContent\"\n     style=\"width: 200px; height: 300px; overflow: scroll;\">\n  <div>\n    <div style=\"flex-basis: 200px;\"></div>\n    <div style=\"flex-basis: 300px;\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGFlexDirectionTest.html",
    "content": "<div id=\"flex_direction_column_no_height\" style=\"width: 100px\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_no_width\" style=\"height: 100px; flex-direction: row;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row\" style=\"height: 100px; width: 100px; flex-direction: row;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse\" style=\"height: 100px; width: 100px; flex-direction: column-reverse;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse\" style=\"height: 100px; width: 100px; flex-direction: row-reverse;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_margin_left\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; margin-left: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<!-- margin-inline-start maps to YGEdgeStart in the generated tests -->\n<div id=\"flex_direction_row_reverse_margin_start\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; margin-inline-start: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_margin_right\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; margin-right: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_margin_end\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; margin-inline-end: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_margin_top\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; margin-top: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_margin_bottom\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; margin-bottom: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_padding_left\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; padding-left: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_padding_start\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; padding-inline-start: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_padding_right\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; padding-right: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_padding_end\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; padding-inline-end: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_padding_top\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; padding-top: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_padding_bottom\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; padding-bottom: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_border_left\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; border-left-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_border_start\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; border-inline-start-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_border_right\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; border-right-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_border_end\"\n  style=\"height: 100px; width: 100px; flex-direction: row-reverse; border-inline-end-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_border_top\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; border-top-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_column_reverse_border_bottom\"\n  style=\"height: 100px; width: 100px; flex-direction: column-reverse; border-bottom-width: 100px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"flex_direction_row_reverse_pos_left\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; left: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_pos_start\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; inset-inline-start: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_pos_right\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; right: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_pos_end\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; inset-inline-end: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_column_reverse_pos_top\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; top: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_column_reverse_pos_bottom\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; bottom: 100px;\">\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_pos_left\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; left: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_pos_right\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; right: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_pos_top\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; top: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_pos_bottom\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; bottom: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_pos_start\" data-disabled=\"true\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; inset-inline-start: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_pos_end\" data-disabled=\"true\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; inset-inline-end: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_margin_left\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-left: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_margin_right\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-right: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_margin_top\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-top: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_margin_bottom\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-bottom: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_marign_start\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-inline-start: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_margin_end\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; margin-inline-end: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_border_left\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-left: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_border_right\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-right: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_border_top\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-top: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_border_bottom\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-bottom: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_border_start\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-inline-start: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_border_end\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; border-inline-end: 10px solid black\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_padding_left\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-left: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_padding_right\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-right: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_padding_top\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-top: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_col_reverse_inner_padding_bottom\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: column-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-bottom: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_padding_start\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-inline-start: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_row_reverse_inner_padding_end\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px; flex-direction: row-reverse; \">\n    <div style=\"width: 10px; height: 10px; position: absolute; padding-inline-end: 10px\"></div>\n    <div style=\"width: 10px;\"></div>\n    <div style=\"width: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_direction_alternating_with_percent\" style=\"height: 300px; width: 200px; flex-direction: column;\">\n  <div style=\"height: 50%; width: 50%; left: 10%; top: 10%; flex-direction: row;\">\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGFlexTest.html",
    "content": "<div id=\"flex_basis_flex_grow_column\" style=\"width: 100px; height: 100px;\">\n  <div style=\"flex-basis: 50px; flex-grow: 1;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"flex_shrink_flex_grow_row\" style=\"width: 500px; height: 500px; flex-direction: row;\">\n  <div style=\"width: 500px; height: 100px; flex-grow: 0; flex-shrink: 1;\"></div>\n  <div style=\"width: 500px; height: 100px; flex-grow: 0; flex-shrink: 1;\"></div>\n</div>\n\n<div id=\"flex_shrink_flex_grow_child_flex_shrink_other_child\" style=\"width: 500px; height: 500px; flex-direction: row;\">\n  <div style=\"width: 500px; height: 100px; flex-grow: 0; flex-shrink: 1;\"></div>\n  <div style=\"width: 500px; height: 100px; flex-grow: 1; flex-shrink: 1;\"></div>\n</div>\n\n<div id=\"flex_basis_flex_grow_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex-basis: 50px; flex-grow: 1;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"flex_basis_flex_shrink_column\" style=\"width: 100px; height: 100px;\">\n  <div style=\"flex-basis: 100px; flex-shrink: 1;\"></div>\n  <div style=\"flex-basis: 50px;\"></div>\n</div>\n\n<div id=\"flex_basis_flex_shrink_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"flex-basis: 100px; flex-shrink: 1;\"></div>\n  <div style=\"flex-basis: 50px;\"></div>\n</div>\n\n<div id=\"flex_shrink_to_zero\" style=\"height: 75px;\">\n  <div style=\"width: 50px; height: 50px; flex-shrink:0;\"></div>\n  <div style=\"width: 50px; height: 50px; flex-shrink:1;\"></div>\n  <div style=\"width: 50px; height: 50px; flex-shrink:0;\"></div>\n</div>\n\n<div id=\"flex_basis_overrides_main_size\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"flex_grow_shrink_at_most\" style=\"height: 100px; width: 100px;\">\n  <div>\n    <div style=\"flex-grow:1; flex-shrink:1;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_less_than_factor_one\" style=\"height: 500px; width: 200px; flex-direction:column;\">\n  <div style=\"flex-grow:0.2; flex-shrink:0; flex-basis: 40px;\"></div>\n  <div style=\"flex-grow:0.2; flex-shrink:0;\"></div>\n  <div style=\"flex-grow:0.4; flex-shrink:0;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGFlexWrapTest.html",
    "content": "<div data-disabled=\"true\" id=\"wrap_column\" style=\"height: 100px; flex-wrap: wrap\">\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_row\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap\">\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_row_align_items_flex_end\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap; align-items: flex-end;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_row_align_items_center\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap; align-items: center;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n</div>\n\n<div id=\"flex_wrap_children_with_min_main_overriding_flex_basis\" style=\"width: 100px; flex-wrap: wrap; flex-direction: row;\">\n  <div style=\"flex-basis: 50px; height: 50px; min-width: 55px;\"></div>\n  <div style=\"flex-basis: 50px; height: 50px; min-width: 55px;\"></div>\n</div>\n\n<div id=\"flex_wrap_wrap_to_child_height\">\n  <div style=\"flex-direction: row; align-items: flex-start; flex-wrap: wrap;\">\n    <div style=\"width: 100px;\">\n      <div style=\"height: 100px; width: 100px;\"></div>\n    </div>\n  </div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"flex_wrap_align_stretch_fits_one_row\" style=\"width: 150px; height: 100px; flex-wrap: wrap; flex-direction: row;\">\n  <div style=\"width: 50px;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_row_align_content_flex_start\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap-reverse; align-content: flex-start;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_row_align_content_center\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap-reverse; align-content: center;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_row_single_line_different_size\" style=\"width: 300px; flex-direction: row; flex-wrap: wrap-reverse; align-content: flex-start;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_row_align_content_stretch\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap-reverse; align-content: stretch;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_row_align_content_space_around\" style=\"width: 100px; flex-direction: row; flex-wrap: wrap-reverse; align-content: space-around;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrap_reverse_column_fixed_size\" style=\"width: 200px; height: 100px; flex-direction: column; flex-wrap: wrap-reverse; align-items: center;\">\n  <div style=\"height: 10px; width: 30px;\"></div>\n  <div style=\"height: 20px; width: 30px;\"></div>\n  <div style=\"height: 30px; width: 30px;\"></div>\n  <div style=\"height: 40px; width: 30px;\"></div>\n  <div style=\"height: 50px; width: 30px;\"></div>\n</div>\n\n<div id=\"wrapped_row_within_align_items_center\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"flex-direction:row; flex-wrap: wrap;\">\n    <div style=\"width: 150px; height: 80px;\"></div>\n    <div style=\"width: 80px; height: 80px;\"></div>\n  </div>\n</div>\n\n<div id=\"wrapped_row_within_align_items_flex_start\" style=\"width: 200px; height: 200px; align-items: flex-start;\">\n  <div style=\"flex-direction:row; flex-wrap: wrap;\">\n    <div style=\"width: 150px; height: 80px;\"></div>\n    <div style=\"width: 80px; height: 80px;\"></div>\n  </div>\n</div>\n\n<div id=\"wrapped_row_within_align_items_flex_end\" style=\"width: 200px; height: 200px; align-items: flex-end;\">\n  <div style=\"flex-direction:row; flex-wrap: wrap;\">\n    <div style=\"width: 150px; height: 80px;\"></div>\n    <div style=\"width: 80px; height: 80px;\"></div>\n  </div>\n</div>\n\n<div id=\"wrapped_column_max_height\" style=\"height: 500px; width: 700px; flex-direction: column;align-items: center; justify-content: center; align-content: center; flex-wrap:wrap;\">\n <div style=\"width: 100px; height: 500px; max-height: 200px;\"></div>\n <div style=\"width: 200px; height: 200px; margin: 20px;\"></div>\n <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"wrapped_column_max_height_flex\" style=\"height: 500px; width: 700px; flex-direction: column;align-items: center; justify-content: center; align-content: center; flex-wrap:wrap;\">\n <div style=\"width: 100px; height: 500px; max-height: 200px; flex: 1;\"></div>\n <div style=\"width: 200px; height: 200px; margin: 20px; flex: 1\"></div>\n <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"wrap_nodes_with_content_sizing_overflowing_margin\" style=\"width: 500px; height: 500px;\">\n  <div style=\"flex-direction: row; flex-wrap: wrap; width: 85px;\">\n    <div>\n      <div style=\"height: 40px; width: 40px;\"></div>\n    </div>\n    <div style=\"margin-right: 10px;\">\n      <div style=\"height: 40px; width: 40px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"wrap_nodes_with_content_sizing_margin_cross\" style=\"width: 500px; height: 500px;\">\n  <div style=\"flex-direction: row; flex-wrap: wrap; width: 70px;\">\n    <div>\n      <div style=\"height: 40px; width: 40px;\"></div>\n    </div>\n    <div style=\"margin-top: 10px;\">\n      <div style=\"height: 40px; width: 40px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"wrap_with_min_cross_axis\" style=\"width: 500px; min-height: 500px; flex-direction: row; flex-wrap: wrap;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"wrap_with_max_cross_axis\" style=\"width: 500px; max-height: 500px; flex-direction: row; flex-wrap: wrap;\">\n  <div style=\"width: 400px; height: 200px;\"></div>\n  <div style=\"width: 400px; height: 200px;\"></div>\n</div>\n\n<div id=\"nowrap_expands_flexline_box_to_min_cross\" style=\"min-height: 400px; flex-direction: row; align-items: stretch; align-content: flex-start;\">\n  <div style=\"flex: 1\"></div>\n</div>\n\n<div id=\"wrap_does_not_impose_min_cross_onto_single_flexline\" style=\"min-height: 400px; flex-direction: row; align-items: stretch; align-content: flex-start; flex-wrap: wrap;\">\n  <div style=\"flex: 1\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGGapTest.html",
    "content": "<div id=\"column_gap_flexible\" style=\"flex-direction: row; width: 80px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"flex: 1;\"></div>\n  <div style=\"flex: 1;\"></div>\n  <div style=\"flex: 1;\"></div>\n</div>\n\n<div id=\"column_gap_inflexible\" style=\"flex-direction: row; width: 80px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_mixed_flexible\" style=\"flex-direction: row; width: 80px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"flex: 1;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_child_margins\" style=\"flex-direction: row; width: 80px; height: 100px; column-gap: 10px;\">\n  <div style=\"flex: 1; margin-inline: 2px;\"></div>\n  <div style=\"flex: 1; margin-inline: 10px;\"></div>\n  <div style=\"flex: 1; margin-inline: 15px;\"></div>\n</div>\n\n<div id=\"column_row_gap_wrapping\" style=\"flex-direction: row; flex-wrap: wrap; width: 80px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_start_index\" style=\"flex-direction: row; flex-wrap: wrap; width: 80px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px; position: absolute\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_justify_flex_start\" style=\"flex-direction: row; justify-content: flex-start; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_justify_center\" style=\"flex-direction: row; justify-content: center; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_justify_flex_end\" style=\"flex-direction: row; justify-content: flex-end; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_justify_space_between\" style=\"flex-direction: row; justify-content: space-between; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_justify_space_around\" style=\"flex-direction: row; justify-content: space-around; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_justify_space_evenly\" style=\"flex-direction: row; justify-content: space-evenly; width: 100px; height: 100px; column-gap: 10px;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_flex_start\" style=\"flex-direction: row; flex-wrap: wrap; align-content: flex-start; width: 100px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_center\" style=\"flex-direction: row; flex-wrap: wrap; align-content: center; width: 100px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_flex_end\" style=\"flex-direction: row; flex-wrap: wrap; align-content: flex-end; width: 100px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_space_between\" style=\"flex-direction: row; flex-wrap: wrap; align-content: space-between; width: 100px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_space_around\" style=\"flex-direction: row; flex-wrap: wrap; align-content: space-around; width: 100px; height: 100px; column-gap: 10px; row-gap: 20px;\">\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n  <div style=\"width: 20px; height: 20px\"></div>\n</div>\n\n<div id=\"column_gap_wrap_align_stretch\" style=\"flex-direction: row; flex-wrap: wrap; width: 300px; height: 300px; column-gap: 5px; align-content: stretch;\">\n  <div style=\"min-width: 60px; flex-grow: 1;\"></div>\n  <div style=\"min-width: 60px; flex-grow: 1;\"></div>\n  <div style=\"min-width: 60px; flex-grow: 1;\"></div>\n  <div style=\"min-width: 60px; flex-grow: 1;\"></div>\n  <div style=\"min-width: 60px; flex-grow: 1;\"></div>\n</div>\n\n<div id=\"column_gap_determines_parent_width\" style=\"flex-direction: row; height: 100px; align-items: 'stretch'; column-gap: 10px;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 30px;\"></div>\n</div>\n\n<div id=\"row_gap_align_items_stretch\" style=\"flex-direction: row; flex-wrap: wrap; width: 100px; height: 200px; column-gap: 10px; row-gap: 20px; align-items:stretch; align-content: stretch\">\n  <div style=\"width: 20px; \"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"row_gap_align_items_end\" style=\"flex-direction: row; flex-wrap: wrap; width: 100px; height: 200px; column-gap: 10px; row-gap: 20px; align-items:flex-end;\">\n  <div style=\"width: 20px; \"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"row_gap_column_child_margins\" style=\"flex-direction: column; width: 100px; height: 200px; row-gap: 10px;\">\n  <div style=\"flex: 1; margin-block: 2px;\"></div>\n  <div style=\"flex: 1; margin-block: 10px;\"></div>\n  <div style=\"flex: 1; margin-block: 15px;\"></div>\n</div>\n\n<div id=\"row_gap_row_wrap_child_margins\" style=\"flex-direction: row; flex-wrap: wrap; width: 100px; height: 200px; row-gap: 10px;\">\n  <div style=\"width: 60px; margin-block: 2px;\"></div>\n  <div style=\"width: 60px; margin-block: 10px;\"></div>\n  <div style=\"width: 60px; margin-block: 15px;\"></div>\n</div>\n\n<div id=\"row_gap_determines_parent_height\" style=\"flex-direction: column; width: 100px; align-items: 'stretch'; row-gap: 10px;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 20px\"></div>\n  <div style=\"height: 30px\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping\" style=\"flex-direction: row; width: 300px; height: 700px; padding: 10px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_determines_parent_height\" style=\"flex-direction: row; width: 300px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_both_content_padding_and_item_padding\" style=\"flex-direction: row; width: 300px; height: 700px; padding: 10px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px; padding: 10px;\"></div>\n  <div style=\"width: 100px; height: 100px; padding: 10px;\"></div>\n  <div style=\"width: 100px; height: 100px; padding: 10px;\"></div>\n  <div style=\"width: 100px; height: 100px; padding: 10px;\"></div>\n  <div style=\"width: 100px; height: 100px; padding: 10px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_both_content_padding\" style=\"flex-direction: row; width: 300px; height: 700px; padding: 10px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_content_margin\" style=\"flex-direction: row; width: 300px; height: 700px; margin: 10px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_content_margin_and_padding\" style=\"flex-direction: row; width: 300px; height: 700px; margin: 10px; padding: 10px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_flexible_content\" style=\"flex-direction: row; width: 300px; height: 300px; gap: 10%;\">\n  <div style=\"flex: 1;\"></div>\n  <div style=\"flex: 1;\"></div>\n  <div style=\"flex: 1;\"></div>\n</div>\n\n<div id=\"row_gap_percent_wrapping_with_mixed_flexible_content\" style=\"flex-direction: row; width: 300px; height: 300px; gap: 10%;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"flex: 1;\"></div>\n  <div style=\"width: 10%;\"></div>\n</div>\n\n<!-- TODO: Existing bug that Yoga is not inline with Chromium for calculation with min-width  -->\n<div id=\"row_gap_percent_wrapping_with_min_width\" data-disabled=\"true\" style=\"flex-direction: row; min-width: 300px; gap: 10%; flex-wrap: wrap;\">\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n  <div style=\"width: 100px; height: 100px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGIntrinsicSizeTest.html",
    "content": "<div id=\"contains_inner_text_long_word\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;\">\n        LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda\n    </div>\n</div>\n\n<div id=\"contains_inner_text_no_width_no_height\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_no_width_no_height_long_word_in_paragraph\"\n    style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus\n        loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem\n        Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_fixed_width\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;width:100px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_no_width_fixed_height\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;height:20px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_fixed_width_fixed_height\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;width: 50px; height:20px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_max_width_max_height\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;max-width: 50px; max-height:20px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_max_width_max_height_column\" style=\"width:2000px; align-items: flex-start;\">\n    <div style=\"max-width: 50px;\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n\n<div id=\"contains_inner_text_max_width\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;max-width:100px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"contains_inner_text_fixed_width_shorter_text\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;width:100px\">\n        Lorem ipsum\n    </div>\n</div>\n\n<div id=\"contains_inner_text_fixed_height_shorter_text\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;height:100px\">\n        Lorem ipsum\n    </div>\n</div>\n\n<div id=\"contains_inner_text_max_height\" style=\"width:2000px;height:2000px;align-items: flex-start;\">\n    <div style=\"flex-direction:row;max-height:20px\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at\n        volutpat\n        libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus\n        fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus\n        vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,\n        vitae\n        finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet\n        consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo\n        tincidunt\n        finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam\n        vulputate eleifasd lectus vel varius.\n        Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis\n        in\n        faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel\n        venenatis\n        turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed\n        nunc\n        malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor\n        lobortis.\n        Sed at consectetur ipsum.\n    </div>\n</div>\n\n<div id=\"max_content_width\" style=\"flex-direction: row; width:max-content; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 100px; height: 50px;\">\n    </div>\n    <div style=\"width: 25px; height: 50px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_width\" style=\"width: 90px;\">\n    <div style=\"flex-direction: row; width: fit-content; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div id=\"stretch_width\" style=\"width: 500px;\">\n    <div style=\"flex-direction: row; width: -webkit-fill-available; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div id=\"max_content_height\" style=\"height:max-content; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 50px; height: 100px;\">\n    </div>\n    <div style=\"width: 50px; height: 25px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_height\" style=\"height: 90px; \">\n    <div style=\"height: fit-content; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_height\" style=\"height: 500px;\">\n    <div style=\"height: -webkit-fill-available; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div id=\"max_content_flex_basis_column\" style=\"flex-basis: max-content; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 50px; height: 100px;\">\n    </div>\n    <div style=\"width: 50px; height: 25px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_flex_basis_column\" style=\"height: 90px;\">\n    <div style=\"flex-basis: fit-content; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div id=\"stretch_flex_basis_column\" style=\"height: 500px;\">\n    <div style=\"flex-basis: -webkit-fill-available; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"max_content_flex_basis_row\" style=\"flex-direction: row; flex-basis: max-content; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 100px; height: 500px;\">\n    </div>\n    <div style=\"width: 25px; height: 50px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_flex_basis_row\" style=\"width: 90px;\">\n    <div style=\"flex-direction: row; flex-basis: fit-content; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_flex_basis_row\" style=\"width: 500px;\">\n    <div style=\"flex-direction: row; flex-basis: -webkit-fill-available; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"max_content_max_width\"\n    style=\"flex-direction: row; max-width:max-content; width: 200px; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 100px; height: 50px;\">\n    </div>\n    <div style=\"width: 25px; height: 50px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_max_width\" style=\"width: 90px;\">\n    <div style=\"flex-direction: row; max-width: fit-content; width: 110px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_max_width\" style=\"width: 500px;\">\n    <div style=\"flex-direction: row; max-width: -webkit-fill-available; width: 600px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"max_content_min_width\"\n    style=\"flex-direction: row; min-width:max-content; width: 100px; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 100px; height: 50px;\">\n    </div>\n    <div style=\"width: 25px; height: 50px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_min_width\" style=\"width: 90px;\">\n    <div style=\"flex-direction: row; min-width: fit-content; width: 90px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_min_width\" style=\"width: 500px;\">\n    <div style=\"flex-direction: row; min-width: -webkit-fill-available; width: 400px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 100px; height: 50px;\">\n        </div>\n        <div style=\"width: 25px; height: 50px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"max_content_max_height\" style=\"max-height:max-content; height: 200px; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 50px; height: 100px;\">\n    </div>\n    <div style=\"width: 50px; height: 25px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_max_height\" style=\"height: 90px;\">\n    <div style=\"max-height: fit-content; height: 110px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_max_height\" style=\"height: 500px;\">\n    <div style=\"max-height: -webkit-fill-available; flex-wrap: wrap; height: 600px;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"max_content_min_height\" style=\"min-height:max-content; height: 100px; flex-wrap: wrap;\">\n    <div style=\"width: 50px; height: 50px;\">\n    </div>\n    <div style=\"width: 50px; height: 100px;\">\n    </div>\n    <div style=\"width: 50px; height: 25px;\">\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"fit_content_min_height\" style=\"height: 90px;\">\n    <div style=\"min-height: fit-content; height: 90px; flex-wrap: wrap;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"stretch_min_height\" style=\"height: 500px;\">\n    <div style=\"min-height: -webkit-fill-available; flex-wrap: wrap; height: 400px;\">\n        <div style=\"width: 50px; height: 50px;\">\n        </div>\n        <div style=\"width: 50px; height: 100px;\">\n        </div>\n        <div style=\"width: 50px; height: 25px;\">\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_max_content_width\" style=\"width: 200px\">\n    <div style=\"width: max-content;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_stretch_width\" style=\"width: 200px\">\n    <div style=\"width: -webkit-fill-available;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_fit_content_width\" style=\"width: 200px\">\n    <div style=\"width: fit-content;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_max_content_min_width\" style=\"width: 200px\">\n    <div style=\"min-width: max-content; width: 200px;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_stretch_min_width\" style=\"width: 200px\">\n    <div style=\"min-width: -webkit-fill-available; width: 100px;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" data-disabled=\"true\" id=\"text_fit_content_min_width\" style=\"width: 200px\">\n    <div style=\"min-width: fit-content; width: 300px\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_max_content_max_width\" style=\"width: 200px\">\n    <div style=\"max-width: max-content; width: 2000px;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_stretch_max_width\" style=\"width: 200px\">\n    <div style=\"max-width: -webkit-fill-available; width: 300px;\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum dolor sit amet\n        </div>\n    </div>\n</div>\n\n<div data-disabled=\"true\" id=\"text_fit_content_max_width\" style=\"width: 200px\">\n    <div style=\"max-width: fit-content; width: 1000px\">\n        <div style=\"flex-direction:row;\">\n            Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGJustifyContentTest.html",
    "content": "<div id=\"justify_content_row_flex_start\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: flex-start;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_flex_end\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: flex-end;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_center\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: center;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_space_between\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-between;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_space_around\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-around;\">\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n  <div style=\"width: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_column_flex_start\" style=\"width: 102px; height: 102px; justify-content: flex-start;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_column_flex_end\" style=\"width: 102px; height: 102px; justify-content: flex-end;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_column_center\" style=\"width: 102px; height: 102px; justify-content: center;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_column_space_between\" style=\"width: 102px; height: 102px; justify-content: space-between;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_column_space_around\" style=\"width: 102px; height: 102px; justify-content: space-around;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_min_width_and_margin\" style=\"min-width: 50px; margin-left: 100px; justify-content: center; flex-direction: row;\">\n  <div style=\"height: 20px; width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_row_max_width_and_margin\" style=\"width: 100px; max-width: 80px; margin-left: 100px; justify-content: center; flex-direction: row;\">\n  <div style=\"height: 20px; width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_column_min_height_and_margin\" style=\"min-height: 50px; margin-top: 100px; justify-content: center; flex-direction: column;\">\n  <div style=\"height: 20px; width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_column_max_height_and_margin\" style=\"height: 100px; max-height: 80px; margin-top: 100px; justify-content: center; flex-direction: column;\">\n  <div style=\"height: 20px; width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_column_space_evenly\" style=\"width: 102px; height: 102px; justify-content: space-evenly;\">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_row_space_evenly\" style=\"width: 102px; height: 102px; justify-content: space-evenly; flex-direction: row; \">\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"justify_content_min_width_with_padding_child_width_greater_than_parent\" style=\"width: 1000px; height: 1584px; align-content: stretch;\">\n    <div style=\"flex-direction: row; align-content: stretch;\">\n        <div style=\"flex-direction: row; justify-content: center; align-content: stretch; min-width: 400px; padding-left: 100px; padding-right: 100px;\">\n            <div style=\"height: 100px; width: 300px; align-content: stretch; flex-direction: row;\"></div>\n        </div>\n    </div>\n</div>\n\n<div id=\"justify_content_min_width_with_padding_child_width_lower_than_parent\" style=\"width: 1080px; height: 1584px; align-content: stretch;\">\n    <div style=\"flex-direction: row; align-content: stretch;\">\n        <div style=\"flex-direction: row; justify-content: center; align-content: stretch; min-width: 400px; padding-left: 100px; padding-right: 100px;\">\n            <div style=\"height: 100px; width: 199px; align-content: stretch; flex-direction: row;\"></div>\n        </div>\n    </div>\n</div>\n\n<div id=\"justify_content_space_between_indefinite_container_dim_with_free_space\" style=\"width: 300px; height: 300x; align-items: center;\">\n  <div style=\"flex-direction: row; min-width: 200px; justify-content: space-between;\">\n      <div style=\"width: 50px; height: 50px;\"></div>\n      <div style=\"width: 50px; height: 50px;\"></div>\n  </div>\n</div>\n\n<div id=\"justify_content_flex_start_row_reverse\" style=\"width: 100px; height: 100px; flex-direction: row-reverse; justify-content: flex-start;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_flex_end_row_reverse\" style=\"width: 100px; height: 100px; flex-direction: row-reverse; justify-content: flex-start;\">\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n  <div style=\"width: 20px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_flex_start\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: flex-start;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_flex_end\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: flex-end;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_center\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: center;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_space_between\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-between;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_space_around\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-around;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_space_evenly\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-evenly;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<!-- TODO T208209388: fallback to start vs flexstart in overflowed cases -->\n<div data-disabled=\"true\" id=\"justify_content_overflow_row_reverse_space_around\" style=\"width: 102px; height: 102px; flex-direction: row-reverse; justify-content: space-around;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<!-- TODO T208209388: fallback to start vs flexstart in overflowed cases -->\n<div data-disabled=\"true\" id=\"justify_content_overflow_row_reverse_space_evenly\" style=\"width: 102px; height: 102px; flex-direction: row-reverse; justify-content: space-evenly;\">\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_row_space_evenly_auto_margin\" style=\"width: 102px; height: 102px; flex-direction: row; justify-content: space-evenly;\">\n  <div style=\"width: 40px; margin-right: auto;\"></div>\n  <div style=\"width: 40px;\"></div>\n  <div style=\"width: 40px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGMarginTest.html",
    "content": "<div id=\"margin_start\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"width: 10px; margin-inline-start: 10px;\"></div>\n</div>\n\n<div id=\"margin_top\" style=\"width: 100px; height: 100px;\">\n  <div style=\"height: 10px; margin-top: 10px;\"></div>\n</div>\n\n<div id=\"margin_end\" style=\"width: 100px; height: 100px; flex-direction: row; justify-content: flex-end;\">\n  <div style=\"width: 10px; margin-inline-end: 10px;\"></div>\n</div>\n\n<div id=\"margin_bottom\" style=\"width: 100px; height: 100px; justify-content: flex-end;\">\n  <div style=\"height: 10px; margin-bottom: 10px;\"></div>\n</div>\n\n<div id=\"margin_and_flex_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"margin-inline-start: 10px; margin-inline-end: 10px; flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_and_flex_column\" style=\"width: 100px; height: 100px;\">\n  <div style=\"margin-top: 10px; margin-bottom: 10px; flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_and_stretch_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"margin-top: 10px; margin-bottom: 10px; flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_and_stretch_column\" style=\"width: 100px; height: 100px;\">\n  <div style=\"margin-inline-start: 10px; margin-inline-end: 10px; flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_with_sibling_row\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"margin-inline-end: 10px; flex-grow: 1;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_with_sibling_column\" style=\"width: 100px; height: 100px;\">\n  <div style=\"margin-bottom: 10px; flex-grow: 1;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"margin_auto_bottom\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-bottom:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_top\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-top:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_bottom_and_top\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-top:auto; margin-bottom:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_bottom_and_top_justify_center\" style=\"width: 200px; height: 200px; justify-content: center;\">\n  <div style=\"width: 50px; height: 50px; margin-top:auto; margin-bottom:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_multiple_children_column\" style=\"width: 200px; height: 200px; flex-direction: column; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-top:auto;\"></div>\n  <div style=\"width: 50px; height: 50px; margin-top:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_multiple_children_row\" style=\"width: 200px; height: 200px; flex-direction:row; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_and_right_column\" style=\"width: 200px; height: 200px; align-items: center; flex-direction: row;\">\n  <div style=\"width: 50px; height: 50px; margin-left:auto; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_and_right\" style=\"width: 200px; height: 200px; \">\n  <div style=\"width: 50px; height: 50px; margin-left:auto; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_start_and_end_column\" style=\"width: 200px; height: 200px; align-items: center; flex-direction: row;\">\n  <div style=\"width: 50px; height: 50px; margin-inline-start: auto; margin-inline-end: auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_start_and_end\" style=\"width: 200px; height: 200px; \">\n  <div style=\"width: 50px; height: 50px; margin-inline-start: auto; margin-inline-end: auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_and_right_column_and_center\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-left:auto; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-left:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_right\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 50px; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_and_right_stretch\" style=\"width: 200px; height: 200px; flex-direction:row; align-items: stretch;\">\n  <div style=\"width: 50px; height: 50px; margin-left:auto; margin-right:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_top_and_bottom_stretch\" style=\"width: 200px; height: 200px; flex-direction: column; align-items: stretch;\">\n  <div style=\"width: 50px; height: 50px; margin-top:auto; margin-bottom:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_should_not_be_part_of_max_height\" style=\"width: 250px; height: 250px;\">\n  <div style=\"width: 100px; height: 100px; max-height: 100px; margin-top: 20px;\"></div>\n</div>\n\n<div id=\"margin_should_not_be_part_of_max_width\" style=\"width: 250px; height: 250px;\">\n  <div style=\"width: 100px; height: 100px; max-width: 100px; margin-left: 20px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_right_child_bigger_than_parent\" style=\"height: 52px; width: 52px; justify-content: center;\">\n  <div style=\"width: 72px; height: 72px; margin-left: auto; margin-right:auto;\"></div>\n</div>\n\n<div id=\"margin_auto_left_child_bigger_than_parent\" style=\"height: 52px; width: 52px; justify-content: center;\">\n  <div style=\"width: 72px; height: 72px; margin-left: auto;\"></div>\n</div>\n\n<div id=\"margin_fix_left_auto_right_child_bigger_than_parent\" style=\"height: 52px; width: 52px; justify-content: center;\">\n  <div style=\"width: 72px; height: 72px; margin-left: 10px; margin-right: auto;\"></div>\n</div>\n\n<div id=\"margin_auto_left_fix_right_child_bigger_than_parent\" style=\"height: 52px; width: 52px; justify-content: center;\">\n  <div style=\"width: 72px; height: 72px; margin-left: auto; margin-right: 10px;\"></div>\n</div>\n\n<div id=\"margin_auto_top_stretching_child\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"flex: 1; margin-top:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_left_stretching_child\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"flex: 1; margin-left:auto;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"margin_auto_overflowing_container\" style=\"width: 200px; height: 200px; align-items: center;\">\n  <div style=\"width: 50px; height: 150px; margin-bottom: auto;\"></div>\n  <div style=\"width: 50px; height: 150px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGMinMaxDimensionTest.html",
    "content": "<div id=\"max_width\" style=\"width: 100px; height: 100px;\">\n  <div style=\"height: 10px; max-width: 50px;\"></div>\n</div>\n\n<div id=\"max_height\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n  <div style=\"width: 10px; max-height: 50px;\"></div>\n</div>\n\n<!-- TODO: Yoga's behavior is no longer in line with Chromium  -->\n<div id=\"min_height\" data-disabled=\"true\" style=\"width: 100px; height: 100px;\">\n  <div style=\"flex-grow: 1; min-height: 60px;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<!-- TODO: Yoga's behavior is no longer in line with Chromium  -->\n<div id=\"min_width\" data-disabled=\"true\" style=\"width: 100px; height: 100px; flex-direction: row\">\n  <div style=\"flex-grow: 1; min-width: 60px;\"></div>\n  <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"justify_content_min_max\" style=\"max-height: 200px; min-height: 100px; width: 100px; justify-content: center;\">\n  <div style=\"width: 60px; height: 60px;\"></div>\n</div>\n\n<div id=\"align_items_min_max\" style=\"max-width: 200px; min-width: 100px; height: 100px; align-items: center;\">\n  <div style=\"width: 60px; height: 60px;\"></div>\n</div>\n\n<div id=\"justify_content_overflow_min_max\" style=\"min-height: 100px; max-height: 110px; justify-content: center;\">\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n  <div style=\"width: 50px; height: 50px;\"></div>\n</div>\n\n<div id=\"flex_grow_to_min\" style=\"min-height: 100px; max-height: 500px; width: 100px;\">\n  <div style=\"flex-grow: 1; flex-shrink: 1;\"></div>\n  <div style=\"height: 50px;\"></div>\n</div>\n\n<div id=\"flex_grow_in_at_most_container\" style=\"width: 100px; height: 100px; background-color: white; flex-direction: row; align-items: flex-start;\">\n  <div style=\"flex-direction: row;\">\n    <div style=\"flex-grow: 1; flex-basis: 0px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_child\" style=\"flex-direction: row;\">\n  <div style=\"height: 100px; flex-grow: 1; flex-basis: 0px;\"></div>\n</div>\n\n<div id=\"flex_grow_within_constrained_min_max_column\" style=\"min-height: 100px; max-height: 200px\">\n  <div style=\"flex-grow:1;\"></div>\n  <div style=\"height: 50px;\"></div>\n</div>\n\n<div id=\"flex_grow_within_max_width\" style=\"width: 200px; height: 100px;\">\n  <div style=\"flex-direction: row; max-width: 100px;\">\n    <div style=\"height: 20px; flex-grow: 1;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_within_constrained_max_width\" style=\"width: 200px; height: 100px;\">\n  <div style=\"flex-direction: row; max-width: 300px;\">\n    <div style=\"height: 20px; flex-grow: 1;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_root_ignored\" style=\"width: 100px; min-height: 100px; max-height:500px;flex-grow:1\">\n  <div style=\"flex-basis:200px; flex-grow:1;\"></div>\n  <div style=\"height:100px; \"></div>\n</div>\n\n<div id=\"flex_grow_root_minimized\" style=\"width: 100px; min-height: 100px; max-height:500px\">\n  <div style=\"min-height: 100px; max-height:500px;flex-grow:1\">\n    <div style=\"flex-basis:200px; flex-grow:1;\"></div>\n    <div style=\"height:100px; \"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_height_maximized\" style=\"width: 100px; height:500px\">\n  <div style=\"min-height: 100px; max-height:500px;flex-grow:1\">\n    <div style=\"flex-basis:200px; flex-grow:1;\"></div>\n    <div style=\"height:100px; \"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_within_constrained_min_row\" style=\"min-width: 100px; height:100px; flex-direction: row;\">\n  <div style=\"flex-grow:1;\"></div>\n  <div style=\"width: 50px;\"></div>\n</div>\n\n<div id=\"flex_grow_within_constrained_min_column\" style=\"min-height: 100px;\">\n  <div style=\"flex-grow:1;\"></div>\n  <div style=\"height: 50px;\"></div>\n</div>\n\n<div id=\"flex_grow_within_constrained_max_row\" style=\"width: 200px;\">\n  <div style=\"height: 100px; max-width: 100px; flex-direction: row;\">\n    <div style=\"flex-shrink:1; flex-basis:100px\"></div>\n    <div style=\"width: 50px;\"></div>\n  </div>\n</div>\n\n<div id=\"flex_grow_within_constrained_max_column\" style=\"max-height: 100px; width: 100px;\">\n  <div style=\"flex-shrink:1; flex-basis:100px\"></div>\n  <div style=\"height: 50px;\"></div>\n</div>\n\n<div id=\"child_min_max_width_flexing\" style=\"width: 120px; height: 50px; flex-direction: row; align-items:stretch\">\n  <div style=\"min-width: 60px; flex-grow:1; flex-shrink:0; flex-basis: 0px\"></div>\n  <div style=\"max-width: 20px; flex-grow:1; flex-shrink:0; flex-basis: 50%\"></div>\n</div>\n\n<div id=\"min_width_overrides_width\" style=\"min-width: 100px; width: 50px;\">\n</div>\n\n<div id=\"max_width_overrides_width\" style=\"max-width: 100px; width: 200px;\">\n</div>\n\n<div id=\"min_height_overrides_height\" style=\"min-height: 100px; height: 50px;\">\n</div>\n\n<div id=\"max_height_overrides_height\" style=\"max-height: 100px; height: 200px;\">\n</div>\n\n<div id=\"min_max_percent_no_width_height\" style=\"width: 100px; height: 100px; align-items: flex-start;\">\n  <div style=\"min-width: 10%; max-width: 10%; min-height: 10%; max-height: 10%;\">\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGPaddingTest.html",
    "content": "<div id=\"padding_no_size\" style=\"padding: 10px;\">\n</div>\n\n<div id=\"padding_container_match_child\" style=\"padding: 10px;\">\n  <div style=\"width: 10px; height: 10px;\"></div>\n</div>\n\n<div id=\"padding_flex_child\" style=\"width: 100px; height: 100px; padding: 10px;\">\n  <div style=\"width: 10px; flex-grow:1\"></div>\n</div>\n\n<div id=\"padding_stretch_child\" style=\"width: 100px; height: 100px; padding: 10px;\">\n  <div style=\"height: 10px;\"></div>\n</div>\n\n<div id=\"padding_center_child\"\n  style=\"width: 100px; height: 100px; padding-inline-start: 10px; padding-top: 10; padding-inline-end: 20px; padding-bottom: 20px; align-items: center; justify-content: center;\">\n  <div style=\"height: 10px; width: 10px;\"></div>\n</div>\n\n<div id=\"child_with_padding_align_end\"\n  style=\"width: 200px; height: 200px; justify-content: flex-end; align-items: flex-end;\">\n  <div style=\"width: 100px; height: 100px; padding: 20px;\"></div>\n</div>\n\n<div id=\"physical_and_relative_edge_defined\"\n  style=\"width: 200px; height: 200px; padding-left: 20px; padding-inline-end: 50px;\">\n  <div style=\"width: 100%; height: 50px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGPercentageTest.html",
    "content": "<div id=\"percentage_width_height\" style=\"width: 200px; height: 200px; flex-direction: row;\">\n  <div style=\"width: 30%; height: 30%;\"></div>\n</div>\n\n<div id=\"percentage_position_left_top\" style=\"width: 400px; height: 400px; flex-direction: row;\">\n  <div style=\"width: 45%; height: 55%; left: 10%; top: 20%\"></div>\n</div>\n\n<div id=\"percentage_position_bottom_right\" style=\"width: 500px; height: 500px; flex-direction: row;\">\n  <div style=\"width: 55%; height: 15%; bottom: 10%; right: 20%\"></div>\n</div>\n\n<div id=\"percentage_flex_basis\" style=\"width: 200px; height: 200px; flex-direction: row;\">\n  <div style=\"flex-grow: 1; flex-basis: 50%;\"></div>\n  <div style=\"flex-grow: 1; flex-basis: 25%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_cross\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; flex-basis: 50%;\"></div>\n  <div style=\"flex-grow: 1; flex-basis: 25%;\"></div>\n</div>\n\n\n<!-- TODO: Yoga's behavior is no longer in line with Chromium  -->\n<div id=\"percentage_flex_basis_cross_min_height\" data-disabled=\"true\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; min-height: 60%;\"></div>\n  <div style=\"flex-grow: 2; min-height: 10%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_main_max_height\" style=\"width: 200px; height: 200px; flex-direction: row;\">\n  <div style=\"flex-grow: 1; flex-basis: 10%; max-height: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 10%; max-height: 20%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_cross_max_height\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; flex-basis: 10%; max-height: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 10%; max-height: 20%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_main_max_width\" style=\"width: 200px; height: 200px; flex-direction: row;\">\n  <div style=\"flex-grow: 1; flex-basis: 15%; max-width: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 10%; max-width: 20%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_cross_max_width\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; flex-basis: 10%; max-width: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 15%; max-width: 20%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_main_min_width\" style=\"width: 200px; height: 200px; flex-direction: row;\">\n  <div style=\"flex-grow: 1; flex-basis: 15%; min-width: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 10%; min-width: 20%;\"></div>\n</div>\n\n<div id=\"percentage_flex_basis_cross_min_width\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; flex-basis: 10%; min-width: 60%;\"></div>\n  <div style=\"flex-grow: 4; flex-basis: 15%; min-width: 20%;\"></div>\n</div>\n\n<div id=\"percentage_multiple_nested_with_padding_margin_and_percentage_values\" style=\"width: 200px; height: 200px; flex-direction: column;\">\n  <div style=\"flex-grow: 1; flex-basis: 10%; min-width: 60%; margin: 5px; padding: 3px;\">\n    <div style=\"width: 50%; margin: 5px; padding: 3%;\">\n      <div style=\"width: 45%; margin: 5%; padding: 3px;\"></div>\n    </div>\n  </div>\n  <div style=\"flex-grow: 4; flex-basis: 15%; min-width: 20%;\"></div>\n</div>\n\n<div id=\"percentage_margin_should_calculate_based_only_on_width\" style=\"width: 200px; height: 100px;\">\n  <div style=\"flex-grow: 1; margin: 10%;\">\n    <div style=\"width: 10px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"percentage_padding_should_calculate_based_only_on_width\" style=\"width: 200px; height: 100px;\">\n  <div style=\"flex-grow: 1; padding: 10%;\">\n    <div style=\"width: 10px; height: 10px;\"></div>\n  </div>\n</div>\n\n<div id=\"percentage_absolute_position\" style=\"width: 200px; height: 100px;\">\n  <div style=\"position: absolute; top: 10%; left: 30%; width: 10px; height: 10px;\"></div>\n</div>\n\n<div id=\"percentage_width_height_undefined_parent_size\">\n  <div style=\"width: 50%; height: 50%;\"></div>\n</div>\n\n<div id=\"percent_within_flex_grow\" style=\"flex-direction:row; width: 350px; height: 100px; align-items: stretch; \">\n  <div style=\"width:100px;\"></div>\n  <div style=\"flex-grow: 1;\">\n      <div style=\"width:100%;\"></div>\n  </div>\n  <div style=\"width: 100px;\"></div>\n</div>\n\n<div id=\"percentage_container_in_wrapping_container\" style=\"align-items: center; width: 200px; height: 200px; justify-content: center;\">\n  <div>\n    <div style=\"alignItems: center; flex-direction: row; justify-content: center; width: 100%;\">\n      <div style=\"width: 50px; height: 50px;\"></div>\n      <div style=\"width: 50px; height: 50px;\"></div>\n    </div>\n  </div>\n</div>\n\n<div id=\"percent_absolute_position\" style=\"width: 60px; height: 50px;\">\n  <div style=\"height: 50px; width: 100%; left: 50%; position: absolute; flex-direction: row;\">\n    <div style=\"width: 100%;\"></div>\n    <div style=\"width: 100%;\"></div>\n  </div>\n</div>\n\n<div id=\"percent_of_minmax_main\" style=\"flex-direction: row; min-width: 60px; max-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_min_main\" data-disabled=\"true\" style=\"flex-direction: row; min-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_min_main_multiple\" data-disabled=\"true\" style=\"flex-direction: row; min-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n  <div style=\"width: 50%; height: 20px;\"></div>\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_max_main\" data-disabled=\"true\" style=\"flex-direction: row; max-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_minmax_cross_stretched\" style=\"flex-direction: column; min-width: 60px; max-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_absolute_of_minmax_cross_stretched\" style=\"flex-direction: column; min-width: 60px; max-width: 60px; height: 50px;\">\n  <div style=\"width: 50%; height: 20px; position: absolute;\"></div>\n</div>\n\n<div id=\"percent_of_minmax_cross_unstretched\" style=\"flex-direction: column; min-width: 60px; max-width: 60px; height: 50px; align-items: flex-start;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_min_cross_unstretched\" data-disabled=\"true\" style=\"flex-direction: column; min-width: 60px; height: 50px; align-items: flex-start;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n\n<div id=\"percent_of_max_cross_unstretched\" style=\"flex-direction: column; max-width: 60px; height: 50px; align-items: flex-start;\">\n  <div style=\"width: 50%; height: 20px;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGRoundingTest.html",
    "content": "<div id=\"rounding_flex_basis_flex_grow_row_width_of_100\" style=\"width: 100px; height: 100px; flex-direction: row;\">\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"rounding_flex_basis_flex_grow_row_prime_number_width\" style=\"width: 113px; height: 100px; flex-direction: row;\">\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n <div style=\"flex-grow: 1;\"></div>\n</div>\n\n<div id=\"rounding_flex_basis_flex_shrink_row\" style=\"width: 101px; height: 100px; flex-direction: row;\">\n <div style=\"flex-basis: 100px; flex-shrink: 1;\"></div>\n <div style=\"flex-basis: 25px;\"></div>\n <div style=\"flex-basis: 25px;\"></div>\n</div>\n\n<div id=\"rounding_flex_basis_overrides_main_size\" style=\"height: 113px; width: 100px;\">\n <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n <div style=\"height: 10px; flex-grow:1;\"></div>\n <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_total_fractial\" style=\"height: 113.4px; width: 87.4px;\">\n <div style=\"height: 20.3px; flex-grow:0.7; flex-basis:50.3px;\"></div>\n <div style=\"height: 10px; flex-grow:1.6;\"></div>\n <div style=\"height: 10.7px; flex-grow:1.1;\"></div>\n</div>\n\n<div id=\"rounding_total_fractial_nested\" style=\"height: 113.4px; width: 87.4px;\">\n <div style=\"height: 20.3px; flex-grow:0.7; flex-basis:50.3px;\">\n   <div style=\"bottom: 13.3px; height: 9.9px; flex-grow:1; flex-basis:0.3px;\"></div>\n   <div style=\"top: 13.3px; height: 1.1px; flex-grow:4; flex-basis:0.3px;\"></div>\n </div>\n <div style=\"height: 10px; flex-grow:1.6;\"></div>\n <div style=\"height: 10.7px; flex-grow:1.1;\"></div>\n</div>\n\n<div id=\"rounding_fractial_input_1\" style=\"height: 113.4px; width: 100px;\">\n  <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_fractial_input_2\" style=\"height: 113.6px; width: 100px;\">\n  <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_fractial_input_3\" style=\"top: 0.3px; height: 113.4px; width: 100px;\">\n  <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_fractial_input_4\" style=\"top: 0.7px; height: 113.4px; width: 100px;\">\n  <div style=\"height: 20px; flex-grow:1; flex-basis:50px;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_inner_node_controversy_horizontal\" style=\"width: 320px; flex-direction: row;\">\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n  <div style=\"height: 10px; flex-grow:1;\">\n    <div style=\"height: 10px; flex-grow:1;\">\n    </div>\n  </div>\n  <div style=\"height: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_inner_node_controversy_vertical\" style=\"height: 320px;\">\n  <div style=\"width: 10px; flex-grow:1;\"></div>\n  <div style=\"width: 10px; flex-grow:1;\">\n    <div style=\"width: 10px; flex-grow:1;\">\n    </div>\n  </div>\n  <div style=\"width: 10px; flex-grow:1;\"></div>\n</div>\n\n<div id=\"rounding_inner_node_controversy_combined\" style=\"width: 640px; height: 320px; flex-direction: row;\">\n  <div style=\"height: 100%; flex-grow:1;\"></div>\n  <div style=\"height: 100%; flex-grow:1; flex-direction: column;\">\n    <div style=\"width: 100%; flex-grow:1;\"></div>\n    <div style=\"width: 100%; flex-grow:1;\">\n      <div style=\"flex-grow:1; width: 100%;\">\n      </div>\n    </div>\n    <div style=\"width: 100%; flex-grow:1;\"></div>\n  </div>\n  <div style=\"height: 100%; flex-grow:1;\"></div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGSizeOverflowTest.html",
    "content": "<div id=\"nested_overflowing_child\" style=\"height: 100px; width: 100px;\">\n  <div>\n    <div style=\"height: 200px; width: 200px;\"></div>\n  </div>\n</div>\n\n<div id=\"nested_overflowing_child_in_constraint_parent\" style=\"height: 100px; width: 100px;\">\n  <div style=\"height: 100px; width: 100px;\">\n    <div style=\"height: 200px; width: 200px;\"></div>\n  </div>\n</div>\n\n<div id=\"parent_wrap_child_size_overflowing_parent\" style=\"width: 100px; height: 100px;\">\n  <div style=\"width: 100px;\">\n    <div style=\"width: 100px; height: 200px;\"></div>\n  </div>\n</div>\n"
  },
  {
    "path": "gentest/fixtures/YGStaticPositionTest.html",
    "content": "<!-- The top level divs in each test are needed so that each div overlays each\n     other and the top measurement is accurate -->\n<div id=\"static_position_insets_have_no_effect_left_top\">\n    <div style=\"width: 100px; height: 100px; position: static; top: 50px; left: 50px;\">\n    </div>\n</div>\n\n<div id=\"static_position_insets_have_no_effect_right_bottom\">\n    <div style=\"width: 100px; height: 100px; position: static; bottom: 50px; right: 50px;\">\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_insets_relative_to_positioned_ancestor\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height: 100px; width: 100px; margin-left: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; left: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: row-reverse\">\n        <div style=\"height: 100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; left: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: row-reverse\">\n        <div style=\"height: 100px; width: 100px; position: static; flex-direction: column-reverse\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; left: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_insets_relative_to_positioned_ancestor_row\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: row\">\n        <div style=\"height: 100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; right: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: row\">\n        <div style=\"height: 100px; width: 100px; position: static; flex-direction: column-reverse\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; right: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: column-reverse\">\n        <div style=\"height: 100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; right: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse\">\n    <div style=\"width: 200px; height: 200px; position: relative; flex-direction: column-reverse\">\n        <div style=\"height: 100px; width: 100px; position: static; flex-direction: column-reverse\">\n            <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; right: 50px;\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_insets_relative_to_positioned_ancestor_deep\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height: 100px; width: 100px; margin-left: 100px; position: static\">\n            <div style=\"height: 100px; width: 100px; margin-left: 100px; position: static\">\n                <div style=\"height: 100px; width: 100px; margin-left: 100px; position: static\">\n                    <div style=\"height: 100px; width: 100px; margin-left: 100px; position: static\">\n                        <div style=\"height: 50px; width: 50px; position: absolute; top: 50px; left: 50px;\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_width_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_width_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_width_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_height_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50%; width: 50px; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_height_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50%; width: 50px; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_height_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50%; width: 50px; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_left_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; left: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_left_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; left: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_left_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; left: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_right_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; right: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_right_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; right: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_right_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; right: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_top_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; top: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_top_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; top: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_top_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; top: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_bottom_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; bottom: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_bottom_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; bottom: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_bottom_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; bottom: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_margin_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; margin: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_margin_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; margin: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_margin_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; margin: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_padding_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; padding: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_padding_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; padding: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_padding_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; padding: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_border_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; border: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_border_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; border: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_border_percentage\">\n    <div style=\"width: 200px; height: 200px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50px; border: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_containing_block_padding_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_containing_block_padding_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: relative\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_containing_block_padding_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: static\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_containing_block_content_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:50px; width: 50%; position: absolute\">\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_relative_child_containing_block_content_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:50px; width: 50%; position: relative\">\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_child_containing_block_content_box\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:50px; width: 50%; position: static\">\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_containing_block_padding_and_border\">\n    <div\n        style=\"width: 400px; height: 400px; padding: 8px 1px 4px 9px; border-width: 5px 7px 4px 2px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 61%; width: 41%; position: absolute\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- Amalgamation here just means a bunch of random properties set like border, padding, and margin -->\n<div id=\"static_position_amalgamation\">\n    <div\n        style=\"width: 500px; height: 500px; position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"height:200px; width: 200px; position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"height: 63%; width: 41%; position: absolute; left: 2px; right: 12px; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_no_position_amalgamation\">\n    <div\n        style=\"width: 500px; height: 500px; position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"height:200px; width: 200px; position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"height: 63%; width: 41%; position: absolute; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_zero_for_inset_amalgamation\">\n    <div\n        style=\"width: 500px; height: 500px; position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"height:200px; width: 200px; position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"height: 63%; width: 41%; position: absolute; left: 0%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_start_inset_amalgamation\">\n    <div\n        style=\"width: 500px; height: 500px; position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"height:200px; width: 200px; position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"height: 63%; width: 41%; position: absolute; inset-inline-start: 12px; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_end_inset_amalgamation\">\n    <div\n        style=\"width: 500px; height: 500px; position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"height:200px; width: 200px; position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"height: 63%; width: 41%; position: absolute; inset-inline-end: 4px; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_row_reverse_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; flex-direction: row-reverse;\">\n            <div\n                style=\"position: absolute; height: 12%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_column_reverse_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; flex-direction: column-reverse;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_justify_flex_start_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; justify-content: flex-start;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_justify_flex_start_position_set_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; justify-content: flex-start;\">\n            <div\n                style=\"position: absolute; width: 21%; right: 30px; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_no_definite_size_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"position: absolute; left: 23%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_both_insets_set_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px\">\n            <div\n                style=\"position: absolute; left: 23%; right: 13px; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_justify_center_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; justify-content: center;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_justify_flex_end_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; justify-content: flex-end;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_align_flex_start_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; align-items: flex-start;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_align_center_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; align-items: center;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_align_flex_end_amalgamation\">\n    <div style=\"position: relative; margin: 5px 9px 1px 4px; border-width: 6px 7px 8px 5px; padding: 9px 11px 13px 2px\">\n        <div\n            style=\"position: static; margin: 6px 3px 9px 8px; border-width: 10px 2px 1px 8px; padding: 7px 9px 4px 1px; align-items: flex-end;\">\n            <div\n                style=\"position: absolute; width: 21%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n            <div\n                style=\"position: relative; width: 10%; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                <div\n                    style=\"width: 100px; height: 50px; position: relative; margin: 12px 4px 7px 9px; border-width: 1px 5px 9px 2px; padding: 3px 8px 10px 5px\">\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div id=\"static_position_static_root\" style=\"height:200px; width: 100px; position: static; padding: 1px 11px 4px 6px;\">\n    <div\n        style=\"height: 50%; width: 50%; position: absolute; border-width: 3px 2px 1px 4px; padding: 7px 5px 4px 3px; margin: 11px 15px 1px 12px\">\n    </div>\n</div>\n\n<div id=\"static_position_absolute_child_multiple\">\n    <div style=\"width: 400px; height: 400px; padding: 100px; position: relative\">\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 10%; position: absolute\">\n            </div>\n        </div>\n        <div style=\"height:100px; width: 100px; position: static\">\n            <div style=\"height: 50px; width: 50%; position: absolute\">\n            </div>\n            <div style=\"height: 50px; width: 50%; position: absolute\">\n            </div>\n        </div>\n        <div style=\"height: 50px; width: 25px; position: absolute\">\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "gentest/gentest-driver.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as fs from 'node:fs/promises';\nimport {format} from 'node:util';\nimport {parse, dirname} from 'path';\nimport * as process from 'node:process';\nimport {Builder, logging} from 'selenium-webdriver';\nimport {Options} from 'selenium-webdriver/chrome.js';\nimport {fileURLToPath} from 'url';\nimport {stdin, stdout} from 'node:process';\nimport minimist from 'minimist';\nimport readline from 'node:readline/promises';\nimport signedsource from 'signedsource';\n\nfunction addSignatureToSourceCode(sourceCode: string): string {\n  const codeWithToken = sourceCode.replace(\n    'MAGIC_PLACEHOLDER',\n    signedsource.getSigningToken(),\n  );\n\n  return signedsource.signFile(codeWithToken);\n}\n\nconst argv = minimist(process.argv.slice(2));\nconst specificFixture = argv.f || argv.fixture;\nconst suspend = argv.s || argv.suspend;\nconst headless = argv.h || argv.headless;\n\nconst gentestDir = dirname(fileURLToPath(import.meta.url));\nconst yogaDir = dirname(gentestDir);\n\nlet fixtures = await fs.readdir(`${gentestDir}/fixtures`);\ntry {\n  if (specificFixture != null) {\n    await fs.access(`fixtures/${specificFixture}.html`, fs.constants.F_OK);\n    fixtures = [specificFixture + '.html'];\n  }\n} catch (e) {\n  const errorMessage = e instanceof Error ? e.message : '';\n  console.log(\n    `Trying to access ${specificFixture}.html threw an exception. Executing against all fixtures. ${errorMessage}`,\n  );\n}\n\nconst options = new Options();\noptions.addArguments(\n  '--force-device-scale-factor=1',\n  '--window-position=0,0',\n  '--hide-scrollbars',\n);\nheadless && options.addArguments('--headless');\noptions.setLoggingPrefs({\n  browser: 'ALL',\n  performance: 'ALL',\n});\nconst driver = await new Builder()\n  .forBrowser('chrome')\n  .setChromeOptions(options)\n  .build();\n\nfor (const fileName of fixtures) {\n  const fixture = await fs.readFile(\n    `${gentestDir}/fixtures/${fileName}`,\n    'utf8',\n  );\n  const fileNameNoExtension = parse(fileName).name;\n  console.log('Generate', fileNameNoExtension);\n\n  // TODO: replace this with something more robust than just blindly replacing\n  // start/end in the entire fixture\n  const ltrFixture = fixture\n    .replaceAll('start', 'left')\n    .replaceAll('end', 'right')\n    .replaceAll('flex-left', 'flex-start')\n    .replaceAll('flex-right', 'flex-end');\n\n  const rtlFixture = fixture\n    .replaceAll('start', 'right')\n    .replaceAll('end', 'left')\n    .replaceAll('flex-right', 'flex-start')\n    .replaceAll('flex-left', 'flex-end');\n\n  const template = await fs.readFile(\n    `${gentestDir}/test-template.html`,\n    'utf8',\n  );\n  const f = await fs.open(`${gentestDir}/test.html`, 'w');\n  await f.write(\n    format(template, fileNameNoExtension, ltrFixture, rtlFixture, fixture),\n  );\n  await f.close();\n\n  await driver.get('file://' + process.cwd() + '/test.html');\n  const logs = await driver.manage().logs().get(logging.Type.BROWSER);\n\n  const testLogs = logs.filter(\n    log => !log.message.replace(/^[^\"]*/, '').startsWith('\"gentest-log:'),\n  );\n\n  await fs.writeFile(\n    `${yogaDir}/tests/generated/${fileNameNoExtension}.cpp`,\n    addSignatureToSourceCode(\n      JSON.parse(testLogs[0].message.replace(/^[^\"]*/, '')),\n    ),\n  );\n\n  await fs.writeFile(\n    `${yogaDir}/java/tests/generated/com/facebook/yoga/${fileNameNoExtension}.java`,\n    addSignatureToSourceCode(\n      JSON.parse(testLogs[1].message.replace(/^[^\"]*/, '')).replace(\n        'YogaTest',\n        fileNameNoExtension,\n      ),\n    ),\n  );\n\n  await fs.writeFile(\n    `${yogaDir}/javascript/tests/generated/${fileNameNoExtension}.test.ts`,\n    addSignatureToSourceCode(\n      JSON.parse(testLogs[2].message.replace(/^[^\"]*/, '')).replace(\n        'YogaTest',\n        fileNameNoExtension,\n      ),\n    ),\n  );\n\n  if (suspend) {\n    const rl = readline.createInterface({input: stdin, output: stdout});\n    await rl.question('');\n    rl.close();\n  }\n}\nawait fs.unlink(`${gentestDir}/test.html`);\nawait driver.quit();\n"
  },
  {
    "path": "gentest/gentest-validate.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as fs from 'node:fs/promises';\nimport {dirname} from 'path';\nimport {fileURLToPath} from 'url';\nimport signedsource from 'signedsource';\nimport {glob} from 'glob';\n\nconst yogaRootDir = dirname(dirname(fileURLToPath(import.meta.url)));\n\nconst filesToValidate = await glob(\n  [\n    'tests/generated/**/*.{h,cpp}',\n    'javascript/tests/generated/**/*.test.ts',\n    'java/tests/generated/com/facebook/yoga/**/*.java',\n  ],\n  {\n    cwd: yogaRootDir,\n  },\n);\n\nconsole.log(`Found ${filesToValidate.length} files to validate`);\n\nfor (const file of filesToValidate) {\n  const content = await fs.readFile(`${yogaRootDir}/${file}`, 'utf8');\n  if (signedsource.isSigned(content)) {\n    console.log(`Checking ${file}`);\n    const validSignature = signedsource.verifySignature(content);\n    if (!validSignature) {\n      console.error(`Invalid signature \"${file}\"`);\n      process.exitCode = 1;\n    }\n  } else {\n    console.log(`Skipped ${file}`);\n  }\n}\n"
  },
  {
    "path": "gentest/package.json",
    "content": "{\n  \"name\": \"gentest\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"gentest\": \"node --disable-warning=ExperimentalWarning --loader=babel-register-esm ./src/cli.ts\",\n    \"gentest-validate\": \"node --disable-warning=ExperimentalWarning --loader=babel-register-esm ./scripts/gentest-validate.ts\"\n  },\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"minimist\": \"^1.2.8\",\n    \"selenium-webdriver\": \"^4.16.0\",\n    \"signedsource\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.23.0\",\n    \"@babel/preset-typescript\": \"^7.23.0\",\n    \"@types/minimist\": \"^1.2.5\",\n    \"@types/node\": \"^22.0.0\",\n    \"@types/selenium-webdriver\": \"^4.1.21\",\n    \"babel-register-esm\": \"^1.2.5\",\n    \"glob\": \"^10.4.2\"\n  }\n}\n"
  },
  {
    "path": "gentest/scripts/gentest-validate.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as fs from 'node:fs/promises';\nimport {dirname} from 'path';\nimport {fileURLToPath} from 'url';\nimport signedsource from 'signedsource';\nimport {glob} from 'glob';\n\nconst yogaRootDir = dirname(dirname(dirname(fileURLToPath(import.meta.url))));\n\nconst filesToValidate = await glob(\n  [\n    'tests/generated/**/*.{h,cpp}',\n    'javascript/tests/generated/**/*.test.ts',\n    'java/tests/generated/com/facebook/yoga/**/*.java',\n  ],\n  {\n    cwd: yogaRootDir,\n  },\n);\n\nconsole.log(`Found ${filesToValidate.length} files to validate`);\n\nfor (const file of filesToValidate) {\n  const content = await fs.readFile(`${yogaRootDir}/${file}`, 'utf8');\n  if (signedsource.isSigned(content)) {\n    console.log(`Checking ${file}`);\n    const validSignature = signedsource.verifySignature(content);\n    if (!validSignature) {\n      console.error(`Invalid signature \"${file}\"`);\n      process.exitCode = 1;\n    }\n  } else {\n    console.log(`Skipped ${file}`);\n  }\n}\n"
  },
  {
    "path": "gentest/signedsource.d.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\ndeclare module 'signedsource';\n"
  },
  {
    "path": "gentest/src/ChromePool.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {Builder} from 'selenium-webdriver';\nimport {Options} from 'selenium-webdriver/chrome.js';\nimport type {WebDriver} from 'selenium-webdriver';\n\nexport interface ChromePool {\n  acquire(): Promise<WebDriver>;\n  release(driver: WebDriver): void;\n  shutdown(): Promise<void>;\n}\n\n/**\n * Create a pool of headless Chrome WebDriver instances.\n * acquire() returns a driver when one is available; callers are\n * queued FIFO when all instances are busy.\n */\nexport function createChromePool(size: number): ChromePool {\n  const available: WebDriver[] = [];\n  const waitQueue: Array<(driver: WebDriver) => void> = [];\n  const allDrivers: Promise<WebDriver>[] = [];\n\n  function addDriver(driver: WebDriver): void {\n    const waiter = waitQueue.shift();\n    if (waiter) {\n      waiter(driver);\n    } else {\n      available.push(driver);\n    }\n  }\n\n  // Create all Chrome instances in parallel, making each available as it resolves\n  for (let i = 0; i < size; i++) {\n    const driverPromise = createDriver();\n    allDrivers.push(driverPromise);\n    driverPromise.then(addDriver);\n  }\n\n  return {\n    acquire(): Promise<WebDriver> {\n      const driver = available.pop();\n      if (driver) {\n        return Promise.resolve(driver);\n      }\n      return new Promise<WebDriver>(resolve => {\n        waitQueue.push(resolve);\n      });\n    },\n\n    release(driver: WebDriver): void {\n      addDriver(driver);\n    },\n\n    async shutdown(): Promise<void> {\n      const drivers = await Promise.all(allDrivers);\n      await Promise.all(drivers.map(d => d.quit()));\n    },\n  };\n}\n\nfunction createDriver(): Promise<WebDriver> {\n  const options = new Options();\n  options.addArguments(\n    '--force-device-scale-factor=1',\n    '--window-position=0,0',\n    '--hide-scrollbars',\n    '--headless',\n  );\n\n  return new Builder().forBrowser('chrome').setChromeOptions(options).build();\n}\n"
  },
  {
    "path": "gentest/src/CssToYoga.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport type Emitter from './emitters/Emitter.ts';\nimport type {ParsedStyles, ValueWithUnit} from './Types.ts';\n\nconst INVISIBLE_BORDER_STYLES = new Set(['none', 'initial']);\n\n/**\n * Parse a raw inline style attribute string into a Map of property → value.\n * Expands common shorthands used in fixtures so individual longhand\n * properties are always present in the returned map.\n */\nexport function parseStyleAttribute(styleAttr: string): ParsedStyles {\n  const styles: ParsedStyles = new Map();\n  if (!styleAttr) return styles;\n\n  const declarations = styleAttr.split(';');\n  for (const decl of declarations) {\n    const trimmed = decl.trim();\n    if (!trimmed) continue;\n\n    const colonIdx = trimmed.indexOf(':');\n    if (colonIdx === -1) continue;\n\n    const prop = trimmed.slice(0, colonIdx).trim();\n    let value = trimmed.slice(colonIdx + 1).trim();\n\n    // Strip single or double quotes from values (e.g., align-items: 'stretch')\n    if (\n      (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n      (value.startsWith('\"') && value.endsWith('\"'))\n    ) {\n      value = value.slice(1, -1);\n    }\n\n    expandShorthand(styles, prop, value);\n  }\n\n  return styles;\n}\n\nfunction expandShorthand(\n  styles: ParsedStyles,\n  prop: string,\n  value: string,\n): void {\n  switch (prop) {\n    case 'flex': {\n      // Only handle `flex: N` (single numeric value) as used in fixtures\n      const n = parseFloat(value);\n      if (!isNaN(n) && value.trim() === String(n)) {\n        styles.set('flex-grow', String(n));\n        styles.set('flex-shrink', '1');\n        styles.set('flex-basis', '0%');\n      } else {\n        // Pass through complex flex values as-is\n        styles.set(prop, value);\n      }\n      break;\n    }\n\n    default:\n      styles.set(prop, value);\n      break;\n  }\n}\n\n/**\n * Map parsed CSS properties to Yoga emitter method calls.\n */\nexport function applyStyles(\n  emitter: Emitter,\n  nodeName: string,\n  styles: ParsedStyles,\n  isRoot: boolean,\n): void {\n  // Root nodes get implicit absolute positioning from the template CSS.\n  if (isRoot && !styles.has('position')) {\n    emitter.setPositionType(nodeName, positionValue('absolute'));\n  }\n\n  for (const [prop, value] of styles) {\n    switch (prop) {\n      case 'direction':\n        emitter.setDirection(nodeName, directionValue(value));\n        break;\n\n      case 'position':\n        if (value !== 'relative') {\n          emitter.setPositionType(nodeName, positionValue(value));\n        }\n        break;\n\n      case 'flex-direction':\n        if (value !== 'column') {\n          emitter.setFlexDirection(nodeName, flexDirectionValue(value));\n        }\n        break;\n\n      case 'flex-wrap':\n        if (value !== 'nowrap') {\n          emitter.setFlexWrap(nodeName, wrapValue(value));\n        }\n        break;\n\n      case 'justify-content': {\n        const mapped = justifyValue(value);\n        if (mapped !== undefined && value !== 'flex-start') {\n          emitter.setJustifyContent(nodeName, mapped);\n        }\n        break;\n      }\n\n      case 'align-content': {\n        const mapped = alignValue(value);\n        if (mapped !== undefined && value !== 'flex-start') {\n          emitter.setAlignContent(nodeName, mapped);\n        }\n        break;\n      }\n\n      case 'align-items': {\n        const mapped = alignValue(value);\n        if (mapped !== undefined && value !== 'stretch') {\n          emitter.setAlignItems(nodeName, mapped);\n        }\n        break;\n      }\n\n      case 'align-self': {\n        const mapped = alignValue(value);\n        if (mapped !== undefined) {\n          emitter.setAlignSelf(nodeName, mapped);\n        }\n        break;\n      }\n\n      case 'overflow':\n        if (value !== 'visible') {\n          emitter.setOverflow(nodeName, overflowValue(value));\n        }\n        break;\n\n      case 'display':\n        if (value !== 'flex') {\n          emitter.setDisplay(nodeName, displayValue(value));\n        }\n        break;\n\n      case 'box-sizing':\n        if (value !== 'border-box') {\n          emitter.setBoxSizing(nodeName, boxSizingValue(value));\n        }\n        break;\n\n      case 'flex-grow':\n        if (value !== '0') {\n          emitter.setFlexGrow(nodeName, value);\n        }\n        break;\n\n      case 'flex-shrink':\n        if (value !== '0') {\n          emitter.setFlexShrink(nodeName, value);\n        }\n        break;\n\n      case 'flex-basis': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) emitter.setFlexBasis(nodeName, parsed);\n        break;\n      }\n\n      case 'aspect-ratio':\n        emitter.setAspectRatio(nodeName, parseValueWithUnit(value));\n        break;\n\n      // Dimensions\n      case 'width': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) emitter.setWidth(nodeName, parsed);\n        break;\n      }\n      case 'height': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) emitter.setHeight(nodeName, parsed);\n        break;\n      }\n      case 'min-width': {\n        if (value !== '0' && value !== '0px' && value !== 'auto') {\n          const parsed = parseCssLength(value);\n          if (parsed != null) emitter.setMinWidth(nodeName, parsed);\n        }\n        break;\n      }\n      case 'min-height': {\n        if (value !== '0' && value !== '0px' && value !== 'auto') {\n          const parsed = parseCssLength(value);\n          if (parsed != null) emitter.setMinHeight(nodeName, parsed);\n        }\n        break;\n      }\n      case 'max-width': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) emitter.setMaxWidth(nodeName, parsed);\n        break;\n      }\n      case 'max-height': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) emitter.setMaxHeight(nodeName, parsed);\n        break;\n      }\n\n      // Insets - physical\n      case 'left': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('left'), parsed);\n        }\n        break;\n      }\n      case 'top': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'right': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('right'), parsed);\n        }\n        break;\n      }\n      case 'bottom': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Insets - logical\n      case 'inset-inline-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('start'), parsed);\n        }\n        break;\n      }\n      case 'inset-inline-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('end'), parsed);\n        }\n        break;\n      }\n      case 'inset-block-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'inset-block-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPosition(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Box shorthands\n      case 'margin':\n      case 'padding':\n      case 'border-width': {\n        const parse =\n          prop === 'border-width' ? parseBorderWidth : parseCssLength;\n        const emit = (edge: string, v: ValueWithUnit) => {\n          if (prop === 'margin') emitter.setMargin(nodeName, edge, v);\n          else if (prop === 'padding') emitter.setPadding(nodeName, edge, v);\n          else emitter.setBorder(nodeName, edge, v);\n        };\n        const parts = value.split(/\\s+/);\n        switch (parts.length) {\n          case 1: {\n            const parsed = parse(parts[0]);\n            if (parsed != null) {\n              emit(edgeValue('all'), parsed);\n            }\n            break;\n          }\n          case 2: {\n            const vertVal = parse(parts[0]);\n            const horizVal = parse(parts[1]);\n            if (vertVal != null) {\n              emit(edgeValue('vertical'), vertVal);\n            }\n            if (horizVal != null) {\n              emit(edgeValue('horizontal'), horizVal);\n            }\n            break;\n          }\n          case 3: {\n            const topVal = parse(parts[0]);\n            const horizVal = parse(parts[1]);\n            const bottomVal = parse(parts[2]);\n            if (topVal != null) {\n              emit(edgeValue('top'), topVal);\n            }\n            if (horizVal != null) {\n              emit(edgeValue('horizontal'), horizVal);\n            }\n            if (bottomVal != null) {\n              emit(edgeValue('bottom'), bottomVal);\n            }\n            break;\n          }\n          case 4: {\n            const topVal = parse(parts[0]);\n            const rightVal = parse(parts[1]);\n            const bottomVal = parse(parts[2]);\n            const leftVal = parse(parts[3]);\n            if (topVal != null) {\n              emit(edgeValue('top'), topVal);\n            }\n            if (rightVal != null) {\n              emit(edgeValue('right'), rightVal);\n            }\n            if (bottomVal != null) {\n              emit(edgeValue('bottom'), bottomVal);\n            }\n            if (leftVal != null) {\n              emit(edgeValue('left'), leftVal);\n            }\n            break;\n          }\n        }\n        break;\n      }\n\n      // Gap shorthand\n      case 'gap': {\n        const parts = value.split(/\\s+/);\n        if (parts.length === 1) {\n          const parsed = parseCssLength(parts[0]);\n          if (parsed != null) {\n            emitter.setGap(nodeName, gutterValue('all'), parsed);\n          }\n        } else {\n          const rowVal = parseCssLength(parts[0]);\n          const colVal = parseCssLength(parts[1]);\n          if (rowVal != null) {\n            emitter.setGap(nodeName, gutterValue('row'), rowVal);\n          }\n          if (colVal != null) {\n            emitter.setGap(nodeName, gutterValue('column'), colVal);\n          }\n        }\n        break;\n      }\n\n      // Margins - shorthand logical\n      case 'margin-inline': {\n        const parts = value.split(/\\s+/);\n        if (parts.length === 1) {\n          const parsed = parseCssLength(parts[0]);\n          if (parsed != null) {\n            emitter.setMargin(nodeName, edgeValue('horizontal'), parsed);\n          }\n        } else {\n          const startVal = parseCssLength(parts[0]);\n          const endVal = parseCssLength(parts[1]);\n          if (startVal != null) {\n            emitter.setMargin(nodeName, edgeValue('start'), startVal);\n          }\n          if (endVal != null) {\n            emitter.setMargin(nodeName, edgeValue('end'), endVal);\n          }\n        }\n        break;\n      }\n      case 'margin-block': {\n        const parts = value.split(/\\s+/);\n        if (parts.length === 1) {\n          const parsed = parseCssLength(parts[0]);\n          if (parsed != null) {\n            emitter.setMargin(nodeName, edgeValue('vertical'), parsed);\n          }\n        } else {\n          const topVal = parseCssLength(parts[0]);\n          const bottomVal = parseCssLength(parts[1]);\n          if (topVal != null) {\n            emitter.setMargin(nodeName, edgeValue('top'), topVal);\n          }\n          if (bottomVal != null) {\n            emitter.setMargin(nodeName, edgeValue('bottom'), bottomVal);\n          }\n        }\n        break;\n      }\n\n      // Margins - physical\n      case 'margin-left': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('left'), parsed);\n        }\n        break;\n      }\n      case 'margin-top': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'margin-right': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('right'), parsed);\n        }\n        break;\n      }\n      case 'margin-bottom': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Margins - logical\n      case 'margin-inline-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('start'), parsed);\n        }\n        break;\n      }\n      case 'margin-inline-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('end'), parsed);\n        }\n        break;\n      }\n      case 'margin-block-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'margin-block-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setMargin(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Padding - physical\n      case 'padding-left': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('left'), parsed);\n        }\n        break;\n      }\n      case 'padding-top': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'padding-right': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('right'), parsed);\n        }\n        break;\n      }\n      case 'padding-bottom': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Padding - logical\n      case 'padding-inline-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('start'), parsed);\n        }\n        break;\n      }\n      case 'padding-inline-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('end'), parsed);\n        }\n        break;\n      }\n      case 'padding-inline': {\n        const parts = value.split(/\\s+/);\n        if (parts.length === 1) {\n          const parsed = parseCssLength(parts[0]);\n          if (parsed != null) {\n            emitter.setPadding(nodeName, edgeValue('horizontal'), parsed);\n          }\n        } else {\n          const startVal = parseCssLength(parts[0]);\n          const endVal = parseCssLength(parts[1]);\n          if (startVal != null) {\n            emitter.setPadding(nodeName, edgeValue('start'), startVal);\n          }\n          if (endVal != null) {\n            emitter.setPadding(nodeName, edgeValue('end'), endVal);\n          }\n        }\n        break;\n      }\n      case 'padding-block': {\n        const parts = value.split(/\\s+/);\n        if (parts.length === 1) {\n          const parsed = parseCssLength(parts[0]);\n          if (parsed != null) {\n            emitter.setPadding(nodeName, edgeValue('vertical'), parsed);\n          }\n        } else {\n          const topVal = parseCssLength(parts[0]);\n          const bottomVal = parseCssLength(parts[1]);\n          if (topVal != null) {\n            emitter.setPadding(nodeName, edgeValue('top'), topVal);\n          }\n          if (bottomVal != null) {\n            emitter.setPadding(nodeName, edgeValue('bottom'), bottomVal);\n          }\n        }\n        break;\n      }\n      case 'padding-block-start': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('top'), parsed);\n        }\n        break;\n      }\n      case 'padding-block-end': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setPadding(nodeName, edgeValue('bottom'), parsed);\n        }\n        break;\n      }\n\n      // Border - compound shorthands (e.g. `border: 10px solid black`)\n      case 'border': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('all'), width);\n        }\n        break;\n      }\n      case 'border-top': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('top'), width);\n        }\n        break;\n      }\n      case 'border-right': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('right'), width);\n        }\n        break;\n      }\n      case 'border-bottom': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('bottom'), width);\n        }\n        break;\n      }\n      case 'border-left': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('left'), width);\n        }\n        break;\n      }\n      case 'border-block': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('vertical'), width);\n        }\n        break;\n      }\n      case 'border-inline': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('horizontal'), width);\n        }\n        break;\n      }\n      case 'border-block-start': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('top'), width);\n        }\n        break;\n      }\n      case 'border-block-end': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('bottom'), width);\n        }\n        break;\n      }\n      case 'border-inline-start': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('start'), width);\n        }\n        break;\n      }\n      case 'border-inline-end': {\n        const width = extractBorderWidth(value);\n        if (width != null) {\n          emitter.setBorder(nodeName, edgeValue('end'), width);\n        }\n        break;\n      }\n\n      // Border - physical\n      case 'border-left-width': {\n        const borderStyle = styles.get('border-left-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('left'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-top-width': {\n        const borderStyle = styles.get('border-top-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('top'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-right-width': {\n        const borderStyle = styles.get('border-right-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('right'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-bottom-width': {\n        const borderStyle = styles.get('border-bottom-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('bottom'), parsed);\n          }\n        }\n        break;\n      }\n\n      // Border - logical\n      case 'border-inline-start-width': {\n        const borderStyle = styles.get('border-inline-start-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('start'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-inline-end-width': {\n        const borderStyle = styles.get('border-inline-end-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('end'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-block-start-width': {\n        const borderStyle = styles.get('border-block-start-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('top'), parsed);\n          }\n        }\n        break;\n      }\n      case 'border-block-end-width': {\n        const borderStyle = styles.get('border-block-end-style');\n        if (!borderStyle || !INVISIBLE_BORDER_STYLES.has(borderStyle)) {\n          const parsed = parseBorderWidth(value);\n          if (parsed != null) {\n            emitter.setBorder(nodeName, edgeValue('bottom'), parsed);\n          }\n        }\n        break;\n      }\n\n      // Gap\n      case 'row-gap': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setGap(nodeName, gutterValue('row'), parsed);\n        }\n        break;\n      }\n      case 'column-gap': {\n        const parsed = parseCssLength(value);\n        if (parsed != null) {\n          emitter.setGap(nodeName, gutterValue('column'), parsed);\n        }\n        break;\n      }\n    }\n  }\n}\n\n// Value parsers\n\nexport function parseValueWithUnit(value: string): ValueWithUnit {\n  if (value === 'auto') return {type: 'auto'};\n  if (value === 'undefined') return {type: 'undefined'};\n  if (value === 'max-content') return {type: 'max-content'};\n  if (value === 'fit-content') return {type: 'fit-content'};\n  if (value === 'stretch' || value === '-webkit-fill-available')\n    return {type: 'stretch'};\n  if (value.endsWith('%')) return {type: 'percent', value: parseFloat(value)};\n  return {type: 'points', value: parseFloat(value)};\n}\n\n/**\n * Parse a CSS length value, rejecting unitless non-zero numbers.\n * In CSS, only `0` is valid without a unit for length properties.\n * Invalid values (e.g. `padding-top: 10` without `px`) return null.\n */\nexport function parseCssLength(value: string): ValueWithUnit | null {\n  if (value === 'auto') return {type: 'auto'};\n  if (value === 'undefined') return {type: 'undefined'};\n  if (value === 'max-content') return {type: 'max-content'};\n  if (value === 'fit-content') return {type: 'fit-content'};\n  if (value === 'stretch' || value === '-webkit-fill-available')\n    return {type: 'stretch'};\n  if (value.endsWith('%')) return {type: 'percent', value: parseFloat(value)};\n  if (value.endsWith('px')) return {type: 'points', value: parseFloat(value)};\n  // Unitless 0 is valid\n  const num = parseFloat(value);\n  if (num === 0 && !isNaN(num)) return {type: 'points', value: 0};\n  // Unitless non-zero number is invalid CSS for length properties\n  return null;\n}\n\n/**\n * Parse a CSS border-width value. Rejects unitless non-zero numbers\n * and percentage values (CSS border-width does not accept percentages).\n */\nfunction parseBorderWidth(value: string): ValueWithUnit | null {\n  const parsed = parseCssLength(value);\n  if (parsed != null && parsed.type === 'percent') return null;\n  return parsed;\n}\n\n/**\n * Extract the width component from a compound border shorthand value\n * like `10px solid black` or `solid black 5px`. Returns null if the\n * border style is invisible (none/initial) or no valid width is found.\n */\nfunction extractBorderWidth(value: string): ValueWithUnit | null {\n  const parts = value.split(/\\s+/);\n  const BORDER_STYLES = new Set([\n    'none',\n    'hidden',\n    'dotted',\n    'dashed',\n    'solid',\n    'double',\n    'groove',\n    'ridge',\n    'inset',\n    'outset',\n    'initial',\n  ]);\n\n  let widthStr: string | null = null;\n  let styleStr: string | null = null;\n\n  for (const part of parts) {\n    if (BORDER_STYLES.has(part)) {\n      styleStr = part;\n    } else if (/^[\\d.]/.test(part)) {\n      widthStr = part;\n    }\n    // color values are ignored\n  }\n\n  if (styleStr && INVISIBLE_BORDER_STYLES.has(styleStr)) return null;\n  if (widthStr == null) return null;\n  return parseBorderWidth(widthStr);\n}\n\n// Enum value mappers\n\nfunction directionValue(value: string): string {\n  const map: Record<string, string> = {\n    ltr: 'YGDirectionLTR',\n    rtl: 'YGDirectionRTL',\n    inherit: 'YGDirectionInherit',\n  };\n  return map[value] ?? value;\n}\n\nfunction flexDirectionValue(value: string): string {\n  const map: Record<string, string> = {\n    row: 'YGFlexDirectionRow',\n    'row-reverse': 'YGFlexDirectionRowReverse',\n    column: 'YGFlexDirectionColumn',\n    'column-reverse': 'YGFlexDirectionColumnReverse',\n  };\n  return map[value] ?? value;\n}\n\nfunction justifyValue(value: string): string | undefined {\n  const map: Record<string, string> = {\n    center: 'YGJustifyCenter',\n    'space-around': 'YGJustifySpaceAround',\n    'space-between': 'YGJustifySpaceBetween',\n    'space-evenly': 'YGJustifySpaceEvenly',\n    'flex-start': 'YGJustifyFlexStart',\n    'flex-end': 'YGJustifyFlexEnd',\n    stretch: 'YGJustifyStretch',\n    start: 'YGJustifyStart',\n    end: 'YGJustifyEnd',\n    auto: 'YGJustifyAuto',\n  };\n  return map[value];\n}\n\nfunction alignValue(value: string): string | undefined {\n  const map: Record<string, string> = {\n    auto: 'YGAlignAuto',\n    center: 'YGAlignCenter',\n    stretch: 'YGAlignStretch',\n    'flex-start': 'YGAlignFlexStart',\n    'flex-end': 'YGAlignFlexEnd',\n    'space-between': 'YGAlignSpaceBetween',\n    'space-around': 'YGAlignSpaceAround',\n    'space-evenly': 'YGAlignSpaceEvenly',\n    baseline: 'YGAlignBaseline',\n    start: 'YGAlignStart',\n    end: 'YGAlignEnd',\n  };\n  return map[value];\n}\n\nfunction positionValue(value: string): string {\n  const map: Record<string, string> = {\n    absolute: 'YGPositionTypeAbsolute',\n    static: 'YGPositionTypeStatic',\n    relative: 'YGPositionTypeRelative',\n  };\n  return map[value] ?? 'YGPositionTypeRelative';\n}\n\nfunction wrapValue(value: string): string {\n  const map: Record<string, string> = {\n    wrap: 'YGWrapWrap',\n    'wrap-reverse': 'YGWrapWrapReverse',\n    nowrap: 'YGWrapNoWrap',\n  };\n  return map[value] ?? value;\n}\n\nfunction overflowValue(value: string): string {\n  const map: Record<string, string> = {\n    visible: 'YGOverflowVisible',\n    hidden: 'YGOverflowHidden',\n    scroll: 'YGOverflowScroll',\n  };\n  return map[value] ?? value;\n}\n\nfunction displayValue(value: string): string {\n  const map: Record<string, string> = {\n    flex: 'YGDisplayFlex',\n    none: 'YGDisplayNone',\n    contents: 'YGDisplayContents',\n  };\n  return map[value] ?? value;\n}\n\nfunction boxSizingValue(value: string): string {\n  const map: Record<string, string> = {\n    'border-box': 'YGBoxSizingBorderBox',\n    'content-box': 'YGBoxSizingContentBox',\n  };\n  return map[value] ?? value;\n}\n\nfunction edgeValue(edge: string): string {\n  const map: Record<string, string> = {\n    left: 'YGEdgeLeft',\n    right: 'YGEdgeRight',\n    top: 'YGEdgeTop',\n    bottom: 'YGEdgeBottom',\n    start: 'YGEdgeStart',\n    end: 'YGEdgeEnd',\n    all: 'YGEdgeAll',\n    vertical: 'YGEdgeVertical',\n    horizontal: 'YGEdgeHorizontal',\n  };\n  return map[edge] ?? edge;\n}\n\nfunction gutterValue(gutter: string): string {\n  const map: Record<string, string> = {\n    row: 'YGGutterRow',\n    column: 'YGGutterColumn',\n    all: 'YGGutterAll',\n  };\n  return map[gutter] ?? gutter;\n}\n\nexport function getFlexDirectionForMeasure(styles: ParsedStyles): string {\n  const fd = styles.get('flex-direction');\n  return flexDirectionValue(fd ?? 'column');\n}\n"
  },
  {
    "path": "gentest/src/buildLayoutTree.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport type {WebDriver} from 'selenium-webdriver';\nimport type {LayoutNode} from './Types.ts';\n\n/**\n * Build the layout tree by querying the DOM via a single executeScript call.\n * Sets the document direction first, then walks the DOM under #container.\n */\nexport default async function buildLayoutTree(\n  driver: WebDriver,\n  direction: 'ltr' | 'rtl',\n): Promise<LayoutNode[]> {\n  const rawNodes = await driver.executeScript<RawNode[]>(`\n    var container = document.getElementById('container');\n\n    // Save original style attributes before we modify them with direction.\n    var originalStyles = new Map();\n    function saveStyles(parent) {\n      for (var i = 0; i < parent.children.length; i++) {\n        var child = parent.children[i];\n        originalStyles.set(child, child.getAttribute('style') || '');\n        saveStyles(child);\n      }\n    }\n    saveStyles(container);\n\n    // Set direction on each test case element (not on <html>) so that the\n    // container stays LTR and root elements remain at (0, 0).\n    for (var i = 0; i < container.children.length; i++) {\n      container.children[i].style.direction = '${direction}';\n    }\n\n    function getRoundedSize(node) {\n      var rect = node.getBoundingClientRect();\n      return {\n        width: Math.round(rect.right) - Math.round(rect.left),\n        height: Math.round(rect.bottom) - Math.round(rect.top)\n      };\n    }\n\n    function walkTree(parent, parentLeft, parentTop) {\n      var result = [];\n      for (var i = 0; i < parent.children.length; i++) {\n        var child = parent.children[i];\n        var rect = child.getBoundingClientRect();\n        var size = getRoundedSize(child);\n        var left = Math.round(rect.left - parentLeft);\n        var top = Math.round(rect.top - parentTop);\n\n        var innerText = '';\n        if (child.children.length === 0 && child.innerText) {\n          innerText = child.innerText;\n        }\n\n        result.push({\n          id: child.id || '',\n          left: left,\n          top: top,\n          width: size.width,\n          height: size.height,\n          styleAttr: originalStyles.get(child) || '',\n          experiments: child.dataset.experiments ? child.dataset.experiments.split(' ') : [],\n          disabled: child.dataset.disabled === 'true',\n          innerText: innerText,\n          children: walkTree(child, rect.left, rect.top)\n        });\n      }\n      return result;\n    }\n\n    var containerRect = container.getBoundingClientRect();\n    return walkTree(container, containerRect.left, containerRect.top);\n  `);\n\n  return rawNodes as LayoutNode[];\n}\n\n// Internal type for the raw JSON returned from executeScript\ninterface RawNode {\n  id: string;\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  styleAttr: string;\n  experiments: string[];\n  disabled: boolean;\n  innerText: string;\n  children: RawNode[];\n}\n"
  },
  {
    "path": "gentest/src/cli.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as fs from 'node:fs/promises';\nimport {dirname, parse, relative, resolve} from 'path';\nimport * as process from 'node:process';\nimport {fileURLToPath, pathToFileURL} from 'url';\nimport {stdin, stdout} from 'node:process';\nimport {randomUUID} from 'node:crypto';\nimport minimist from 'minimist';\nimport readline from 'node:readline/promises';\nimport signedsource from 'signedsource';\nimport {glob} from 'glob';\n\nimport type {LayoutNode} from './Types.ts';\nimport {createChromePool} from './ChromePool.ts';\nimport buildLayoutTree from './buildLayoutTree.ts';\nimport {CppEmitter} from './emitters/CppEmitter.ts';\nimport {JavaEmitter} from './emitters/JavaEmitter.ts';\nimport {JavascriptEmitter} from './emitters/JavascriptEmitter.ts';\n\nfunction addSignatureToSourceCode(sourceCode: string): string {\n  const codeWithToken = sourceCode.replace(\n    'MAGIC_PLACEHOLDER',\n    signedsource.getSigningToken(),\n  );\n\n  return signedsource.signFile(codeWithToken);\n}\n\nconst argv = minimist(process.argv.slice(2));\nconst specificFixture = argv.f || argv.fixture;\nconst suspend = argv.s || argv.suspend;\nconst poolSize = parseInt(argv['pool-size'] || '8', 10);\n\nconst gentestDir = dirname(dirname(fileURLToPath(import.meta.url)));\nconst yogaDir = dirname(gentestDir);\nconst fixturesDir = `${gentestDir}/fixtures`;\nconst fontPath = pathToFileURL(\n  resolve(gentestDir, 'fonts/Ahem.ttf'),\n).toString();\n\n// Discover fixtures\nlet fixtures: string[];\ntry {\n  if (specificFixture != null) {\n    const fixturePath = `${fixturesDir}/${specificFixture}.html`;\n    await fs.access(fixturePath, fs.constants.F_OK);\n    fixtures = [fixturePath];\n  } else {\n    fixtures = await glob(`${fixturesDir}/**/*.html`);\n  }\n} catch (e) {\n  const errorMessage = e instanceof Error ? e.message : '';\n  console.log(\n    `Trying to access ${specificFixture}.html threw an exception. Executing against all fixtures. ${errorMessage}`,\n  );\n  fixtures = await glob(`${fixturesDir}/**/*.html`);\n}\n\n// Read template\nconst template = await fs.readFile(`${gentestDir}/test-template.html`, 'utf8');\nconst templateWithFont = template.replace('%FONT_PATH%', fontPath);\n\n// Create Chrome pool\nconst pool = createChromePool(poolSize);\n\n// Process all fixtures in parallel (limited by pool size)\nasync function processFixture(fixturePath: string): Promise<void> {\n  // Acquire Chrome instance\n  const driver = await pool.acquire();\n\n  const fixture = await fs.readFile(fixturePath, 'utf8');\n  const relativePath = relative(fixturesDir, fixturePath);\n  const fileNameNoExtension = parse(relativePath).name;\n\n  // Inject fixture into template\n  const html = templateWithFont.replace('%FIXTURE%', fixture);\n\n  // Write to temp file\n  const tmpFile = `/tmp/gentest-${randomUUID()}.html`;\n  await fs.writeFile(tmpFile, html);\n\n  let ltrTree: LayoutNode[];\n  let rtlTree: LayoutNode[];\n  try {\n    await driver.get('file://' + tmpFile);\n\n    // Wait for @font-face fonts (Ahem) to finish loading before measuring\n    await driver.executeAsyncScript(`\n      var callback = arguments[arguments.length - 1];\n      document.fonts.ready.then(callback);\n    `);\n\n    // Build LTR layout tree\n    ltrTree = await buildLayoutTree(driver, 'ltr');\n\n    // Build RTL layout tree (same page, just change direction)\n    rtlTree = await buildLayoutTree(driver, 'rtl');\n  } finally {\n    pool.release(driver);\n    // Clean up temp file\n    await fs.unlink(tmpFile).catch(() => undefined);\n  }\n\n  // Build test cases from top-level elements\n  const testCases = ltrTree.map((ltrNode, i) => ({\n    name: ltrNode.id || 'INSERT_NAME_HERE',\n    ltrLayout: ltrNode,\n    rtlLayout: rtlTree[i],\n    experiments: ltrNode.experiments,\n    disabled: ltrNode.disabled,\n  }));\n\n  const cppCode = new CppEmitter().generateFixture(\n    fileNameNoExtension,\n    testCases,\n  );\n  const javaCode = new JavaEmitter().generateFixture(\n    fileNameNoExtension,\n    testCases,\n  );\n  const jsCode = new JavascriptEmitter().generateFixture(\n    fileNameNoExtension,\n    testCases,\n  );\n\n  // Sign and write output files\n  await Promise.all([\n    fs.writeFile(\n      `${yogaDir}/tests/generated/${fileNameNoExtension}.cpp`,\n      addSignatureToSourceCode(cppCode),\n    ),\n    fs.writeFile(\n      `${yogaDir}/java/tests/generated/com/facebook/yoga/${fileNameNoExtension}.java`,\n      addSignatureToSourceCode(javaCode),\n    ),\n    fs.writeFile(\n      `${yogaDir}/javascript/tests/generated/${fileNameNoExtension}.test.ts`,\n      addSignatureToSourceCode(jsCode),\n    ),\n  ]);\n\n  console.log('Generated', fileNameNoExtension);\n\n  if (suspend) {\n    const rl = readline.createInterface({input: stdin, output: stdout});\n    await rl.question('');\n    rl.close();\n  }\n}\n\ntry {\n  await Promise.all(fixtures.map(f => processFixture(f)));\n} finally {\n  await pool.shutdown();\n}\n"
  },
  {
    "path": "gentest/src/emitters/CppEmitter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport Emitter from './Emitter.ts';\nimport type {ValueWithUnit} from '../Types.ts';\n\nfunction toValueCpp(value: string | number): string {\n  const n = value.toString().replace('px', '').replace('%', '');\n  if (!Number.isFinite(Number(n))) {\n    return n;\n  }\n\n  return n + (Number(n) % 1 !== 0 ? 'f' : '');\n}\n\nfunction toFunctionNameCpp(value: ValueWithUnit): string {\n  switch (value.type) {\n    case 'percent':\n      return 'Percent';\n    case 'auto':\n      return 'Auto';\n    case 'max-content':\n      return 'MaxContent';\n    case 'fit-content':\n      return 'FitContent';\n    case 'stretch':\n      return 'Stretch';\n    default:\n      return '';\n  }\n}\n\nfunction valueWithUnitToString(value: ValueWithUnit): string {\n  switch (value.type) {\n    case 'points':\n      return toValueCpp(value.value);\n    case 'percent':\n      return toValueCpp(value.value);\n    case 'auto':\n      return 'YGAuto';\n    case 'max-content':\n      return 'MaxContent';\n    case 'fit-content':\n      return 'FitContent';\n    case 'stretch':\n      return 'Stretch';\n    case 'undefined':\n      return 'YGUndefined';\n  }\n}\n\nexport class CppEmitter extends Emitter {\n  constructor() {\n    super('  ');\n  }\n\n  emitCommentHeader(fixtureName: string): void {\n    this.push([\n      '/*',\n      ' * Copyright (c) Meta Platforms, Inc. and affiliates.',\n      ' *',\n      ' * This source code is licensed under the MIT license found in the',\n      ' * LICENSE file in the root directory of this source tree.',\n      ' *',\n      ' * clang-format off',\n      ' * MAGIC_PLACEHOLDER',\n      ' * generated by gentest/src/GentestDriver.ts from gentest/fixtures/' +\n        fixtureName +\n        '.html',\n      ' */',\n      '',\n    ]);\n  }\n\n  emitPrologue(_fixtureName: string): void {\n    this.push([\n      '#include <gtest/gtest.h>',\n      '#include <yoga/Yoga.h>',\n      '#include \"../util/TestUtil.h\"',\n      '',\n    ]);\n  }\n\n  emitTestPrologue(\n    name: string,\n    experiments: string[],\n    disabled: boolean,\n  ): void {\n    this.push('TEST(YogaTest, ' + name + ') {');\n    this.pushIndent();\n\n    if (disabled) {\n      this.push('GTEST_SKIP();');\n      this.push('');\n    }\n\n    this.push('YGConfigRef config = YGConfigNew();');\n    for (const experiment of experiments) {\n      this.push(\n        'YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeature' +\n          experiment +\n          ', true);',\n      );\n    }\n    this.push('');\n  }\n\n  emitTestTreePrologue(nodeName: string): void {\n    this.push('YGNodeRef ' + nodeName + ' = YGNodeNewWithConfig(config);');\n  }\n\n  emitTestEpilogue(_experiments: string[]): void {\n    this.push('');\n    this.push('YGNodeFreeRecursive(root);');\n    this.push('');\n    this.push('YGConfigFree(config);');\n    this.popIndent();\n    this.push(['}', '']);\n  }\n\n  emitEpilogue(): void {\n    // no-op for C++\n  }\n\n  assertEQ(v0: number, v1: string): void {\n    this.push('ASSERT_FLOAT_EQ(' + toValueCpp(v0) + ', ' + v1 + ');');\n  }\n\n  layoutGetLeft(node: string): string {\n    return 'YGNodeLayoutGetLeft(' + node + ')';\n  }\n\n  layoutGetTop(node: string): string {\n    return 'YGNodeLayoutGetTop(' + node + ')';\n  }\n\n  layoutGetWidth(node: string): string {\n    return 'YGNodeLayoutGetWidth(' + node + ')';\n  }\n\n  layoutGetHeight(node: string): string {\n    return 'YGNodeLayoutGetHeight(' + node + ')';\n  }\n\n  insertChild(parent: string, child: string, index: number): void {\n    this.push(\n      'YGNodeInsertChild(' + parent + ', ' + child + ', ' + index + ');',\n    );\n  }\n\n  calculateLayout(\n    node: string,\n    direction: string,\n    _experiments: string[],\n  ): void {\n    this.push(\n      'YGNodeCalculateLayout(' +\n        node +\n        ', YGUndefined, YGUndefined, ' +\n        direction +\n        ');',\n    );\n  }\n\n  setMeasureFunc(node: string, text: string, _flexDirection: string): void {\n    this.push(`YGNodeSetContext(${node}, (void*)\"${text}\");`);\n    this.push(\n      `YGNodeSetMeasureFunc(${node}, &facebook::yoga::test::IntrinsicSizeMeasure);`,\n    );\n  }\n\n  setDirection(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetDirection(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setFlexDirection(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetFlexDirection(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setJustifyContent(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetJustifyContent(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setAlignContent(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetAlignContent(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setAlignItems(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetAlignItems(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setAlignSelf(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetAlignSelf(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setPositionType(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetPositionType(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setFlexWrap(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetFlexWrap(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setOverflow(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetOverflow(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setDisplay(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetDisplay(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setBoxSizing(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetBoxSizing(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setFlexGrow(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetFlexGrow(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setFlexShrink(node: string, value: string): void {\n    this.push(\n      'YGNodeStyleSetFlexShrink(' + node + ', ' + toValueCpp(value) + ');',\n    );\n  }\n\n  setFlexBasis(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetFlexBasis' + suffix + '(' + node + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetFlexBasis' + suffix + '(' + node + ', ' + v + ');',\n      );\n    }\n  }\n\n  setWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetWidth' + suffix + '(' + node + ');');\n    } else {\n      this.push('YGNodeStyleSetWidth' + suffix + '(' + node + ', ' + v + ');');\n    }\n  }\n\n  setHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetHeight' + suffix + '(' + node + ');');\n    } else {\n      this.push('YGNodeStyleSetHeight' + suffix + '(' + node + ', ' + v + ');');\n    }\n  }\n\n  setMinWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetMinWidth' + suffix + '(' + node + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetMinWidth' + suffix + '(' + node + ', ' + v + ');',\n      );\n    }\n  }\n\n  setMinHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetMinHeight' + suffix + '(' + node + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetMinHeight' + suffix + '(' + node + ', ' + v + ');',\n      );\n    }\n  }\n\n  setMaxWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetMaxWidth' + suffix + '(' + node + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetMaxWidth' + suffix + '(' + node + ', ' + v + ');',\n      );\n    }\n  }\n\n  setMaxHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push('YGNodeStyleSetMaxHeight' + suffix + '(' + node + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetMaxHeight' + suffix + '(' + node + ', ' + v + ');',\n      );\n    }\n  }\n\n  setMargin(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (suffix === 'Auto') {\n      this.push('YGNodeStyleSetMarginAuto(' + node + ', ' + edge + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetMargin' +\n          suffix +\n          '(' +\n          node +\n          ', ' +\n          edge +\n          ', ' +\n          v +\n          ');',\n      );\n    }\n  }\n\n  setPadding(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    this.push(\n      'YGNodeStyleSetPadding' +\n        suffix +\n        '(' +\n        node +\n        ', ' +\n        edge +\n        ', ' +\n        v +\n        ');',\n    );\n  }\n\n  setPosition(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    if (suffix === 'Auto') {\n      this.push('YGNodeStyleSetPositionAuto(' + node + ', ' + edge + ');');\n    } else {\n      this.push(\n        'YGNodeStyleSetPosition' +\n          suffix +\n          '(' +\n          node +\n          ', ' +\n          edge +\n          ', ' +\n          v +\n          ');',\n      );\n    }\n  }\n\n  setBorder(node: string, edge: string, value: ValueWithUnit): void {\n    const v = valueWithUnitToString(value);\n    this.push('YGNodeStyleSetBorder(' + node + ', ' + edge + ', ' + v + ');');\n  }\n\n  setGap(node: string, gutter: string, value: ValueWithUnit): void {\n    const suffix = toFunctionNameCpp(value);\n    const v = valueWithUnitToString(value);\n    this.push(\n      'YGNodeStyleSetGap' +\n        suffix +\n        '(' +\n        node +\n        ', ' +\n        gutter +\n        ', ' +\n        v +\n        ');',\n    );\n  }\n\n  setAspectRatio(node: string, value: ValueWithUnit): void {\n    const v = valueWithUnitToString(value);\n    this.push('YGNodeStyleSetAspectRatio(' + node + ', ' + v + ');');\n  }\n}\n"
  },
  {
    "path": "gentest/src/emitters/Emitter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport type {ValueWithUnit, LayoutNode} from '../Types.ts';\nimport {\n  parseStyleAttribute,\n  applyStyles,\n  getFlexDirectionForMeasure,\n} from '../CssToYoga.ts';\n\ninterface TestCase {\n  name: string;\n  ltrLayout: LayoutNode;\n  rtlLayout: LayoutNode;\n  experiments: string[];\n  disabled: boolean;\n}\n\n/**\n * Abstract base class for language-specific test code emitters.\n * Accumulates lines of output with indentation management.\n */\nexport default abstract class Emitter {\n  protected lines: string[] = [];\n  protected indents: string[] = [];\n  protected indent: string;\n\n  constructor(indent: string) {\n    this.indent = indent;\n  }\n\n  push(line: string | string[]): void {\n    if (Array.isArray(line)) {\n      for (const l of line) {\n        this.push(l);\n      }\n      return;\n    }\n    if (line.length > 0) {\n      line = this.indents.join('') + line;\n    }\n    this.lines.push(line);\n  }\n\n  pushIndent(): void {\n    this.indents.push(this.indent);\n  }\n\n  popIndent(): void {\n    this.indents.pop();\n  }\n\n  getOutput(): string {\n    return this.lines.join('\\n');\n  }\n\n  // Comment header\n  abstract emitCommentHeader(fixtureName: string): void;\n\n  // Lifecycle\n  abstract emitPrologue(fixtureName: string): void;\n  abstract emitEpilogue(): void;\n  abstract emitTestPrologue(\n    name: string,\n    experiments: string[],\n    disabled: boolean,\n  ): void;\n  abstract emitTestEpilogue(experiments: string[]): void;\n  abstract emitTestTreePrologue(nodeName: string): void;\n\n  // Node operations\n  abstract insertChild(parent: string, child: string, index: number): void;\n  abstract calculateLayout(\n    node: string,\n    direction: string,\n    experiments: string[],\n  ): void;\n  abstract setMeasureFunc(\n    node: string,\n    text: string,\n    flexDirection: string,\n  ): void;\n\n  // Assertions\n  abstract assertEQ(expected: number, actual: string): void;\n  abstract layoutGetLeft(node: string): string;\n  abstract layoutGetTop(node: string): string;\n  abstract layoutGetWidth(node: string): string;\n  abstract layoutGetHeight(node: string): string;\n\n  // Style setters\n  abstract setDirection(node: string, value: string): void;\n  abstract setFlexDirection(node: string, value: string): void;\n  abstract setJustifyContent(node: string, value: string): void;\n  abstract setAlignContent(node: string, value: string): void;\n  abstract setAlignItems(node: string, value: string): void;\n  abstract setAlignSelf(node: string, value: string): void;\n  abstract setPositionType(node: string, value: string): void;\n  abstract setFlexWrap(node: string, value: string): void;\n  abstract setOverflow(node: string, value: string): void;\n  abstract setDisplay(node: string, value: string): void;\n  abstract setBoxSizing(node: string, value: string): void;\n  abstract setFlexGrow(node: string, value: string): void;\n  abstract setFlexShrink(node: string, value: string): void;\n  abstract setFlexBasis(node: string, value: ValueWithUnit): void;\n  abstract setWidth(node: string, value: ValueWithUnit): void;\n  abstract setHeight(node: string, value: ValueWithUnit): void;\n  abstract setMinWidth(node: string, value: ValueWithUnit): void;\n  abstract setMinHeight(node: string, value: ValueWithUnit): void;\n  abstract setMaxWidth(node: string, value: ValueWithUnit): void;\n  abstract setMaxHeight(node: string, value: ValueWithUnit): void;\n  abstract setMargin(node: string, edge: string, value: ValueWithUnit): void;\n  abstract setPadding(node: string, edge: string, value: ValueWithUnit): void;\n  abstract setPosition(node: string, edge: string, value: ValueWithUnit): void;\n  abstract setBorder(node: string, edge: string, value: ValueWithUnit): void;\n  abstract setGap(node: string, gutter: string, value: ValueWithUnit): void;\n  abstract setAspectRatio(node: string, value: ValueWithUnit): void;\n\n  /**\n   * Generate test code for a complete fixture.\n   */\n  generateFixture(fixtureName: string, testCases: TestCase[]): string {\n    this.emitCommentHeader(fixtureName);\n\n    this.emitPrologue(fixtureName);\n\n    for (const testCase of testCases) {\n      const ltrTree = testCase.ltrLayout;\n      const rtlTree = testCase.rtlLayout;\n\n      this.emitTestPrologue(\n        testCase.name,\n        testCase.experiments,\n        testCase.disabled,\n      );\n\n      this.setupTestTree(ltrTree, 'root', null, undefined);\n\n      this.calculateLayout('root', 'YGDirectionLTR', testCase.experiments);\n      this.push('');\n\n      this.assertTestTree(ltrTree, 'root');\n      this.push('');\n\n      this.calculateLayout('root', 'YGDirectionRTL', testCase.experiments);\n      this.push('');\n\n      this.assertTestTree(rtlTree, 'root');\n\n      this.emitTestEpilogue(testCase.experiments);\n    }\n\n    this.emitEpilogue();\n\n    return this.getOutput();\n  }\n\n  private setupTestTree(\n    node: LayoutNode,\n    nodeName: string,\n    parentName: string | null,\n    index: number | undefined,\n  ): void {\n    this.emitTestTreePrologue(nodeName);\n\n    const styles = parseStyleAttribute(node.styleAttr);\n    const isRoot = parentName === null;\n    applyStyles(this, nodeName, styles, isRoot);\n\n    if (parentName !== null && index !== undefined) {\n      this.insertChild(parentName, nodeName, index);\n    }\n\n    if (node.innerText && node.children.length === 0) {\n      const flexDirection = getFlexDirectionForMeasure(styles);\n      this.setMeasureFunc(nodeName, node.innerText, flexDirection);\n    }\n\n    for (let i = 0; i < node.children.length; i++) {\n      this.push('');\n      const childName = nodeName + '_child' + i;\n      this.setupTestTree(node.children[i], childName, nodeName, i);\n    }\n  }\n\n  private assertTestTree(node: LayoutNode, nodeName: string): void {\n    this.assertEQ(node.left, this.layoutGetLeft(nodeName));\n    this.assertEQ(node.top, this.layoutGetTop(nodeName));\n    this.assertEQ(node.width, this.layoutGetWidth(nodeName));\n    this.assertEQ(node.height, this.layoutGetHeight(nodeName));\n\n    for (let i = 0; i < node.children.length; i++) {\n      this.push('');\n      const childName = nodeName + '_child' + i;\n      this.assertTestTree(node.children[i], childName);\n    }\n  }\n}\n"
  },
  {
    "path": "gentest/src/emitters/JavaEmitter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport Emitter from './Emitter.ts';\nimport type {ValueWithUnit} from '../Types.ts';\n\nfunction toValueJava(value: string | number): string {\n  const n = value.toString().replace('px', '').replace('%', '');\n  return n;\n}\n\nfunction toMethodName(value: ValueWithUnit): string {\n  switch (value.type) {\n    case 'percent':\n      return 'Percent';\n    case 'auto':\n      return 'Auto';\n    case 'max-content':\n      return 'MaxContent';\n    case 'fit-content':\n      return 'FitContent';\n    case 'stretch':\n      return 'Stretch';\n    default:\n      return '';\n  }\n}\n\nfunction valueWithUnitToString(value: ValueWithUnit): string {\n  switch (value.type) {\n    case 'points':\n      return toValueJava(value.value);\n    case 'percent':\n      return toValueJava(value.value);\n    case 'auto':\n      return 'YogaConstants.AUTO';\n    case 'max-content':\n      return 'MAX_CONTENT';\n    case 'fit-content':\n      return 'FIT_CONTENT';\n    case 'stretch':\n      return 'STRETCH';\n    case 'undefined':\n      return 'YogaConstants.UNDEFINED';\n  }\n}\n\nfunction toJavaUpper(symbol: string): string {\n  let out = '';\n  for (let i = 0; i < symbol.length; i++) {\n    const c = symbol[i];\n    if (\n      c === c.toUpperCase() &&\n      i !== 0 &&\n      symbol[i - 1] !== symbol[i - 1].toUpperCase()\n    ) {\n      out += '_';\n    }\n    out += c.toUpperCase();\n  }\n  return out;\n}\n\nexport class JavaEmitter extends Emitter {\n  private static enumMap: Record<string, string> = {\n    YGAlignAuto: 'YogaAlign.AUTO',\n    YGAlignCenter: 'YogaAlign.CENTER',\n    YGAlignFlexEnd: 'YogaAlign.FLEX_END',\n    YGAlignFlexStart: 'YogaAlign.FLEX_START',\n    YGAlignStretch: 'YogaAlign.STRETCH',\n    YGAlignSpaceBetween: 'YogaAlign.SPACE_BETWEEN',\n    YGAlignSpaceAround: 'YogaAlign.SPACE_AROUND',\n    YGAlignSpaceEvenly: 'YogaAlign.SPACE_EVENLY',\n    YGAlignBaseline: 'YogaAlign.BASELINE',\n    YGDirectionInherit: 'YogaDirection.INHERIT',\n    YGDirectionLTR: 'YogaDirection.LTR',\n    YGDirectionRTL: 'YogaDirection.RTL',\n    YGEdgeBottom: 'YogaEdge.BOTTOM',\n    YGEdgeEnd: 'YogaEdge.END',\n    YGEdgeLeft: 'YogaEdge.LEFT',\n    YGEdgeRight: 'YogaEdge.RIGHT',\n    YGEdgeStart: 'YogaEdge.START',\n    YGEdgeTop: 'YogaEdge.TOP',\n    YGEdgeAll: 'YogaEdge.ALL',\n    YGEdgeVertical: 'YogaEdge.VERTICAL',\n    YGEdgeHorizontal: 'YogaEdge.HORIZONTAL',\n    YGGutterAll: 'YogaGutter.ALL',\n    YGGutterColumn: 'YogaGutter.COLUMN',\n    YGGutterRow: 'YogaGutter.ROW',\n    YGFlexDirectionColumn: 'YogaFlexDirection.COLUMN',\n    YGFlexDirectionColumnReverse: 'YogaFlexDirection.COLUMN_REVERSE',\n    YGFlexDirectionRow: 'YogaFlexDirection.ROW',\n    YGFlexDirectionRowReverse: 'YogaFlexDirection.ROW_REVERSE',\n    YGJustifyCenter: 'YogaJustify.CENTER',\n    YGJustifyFlexEnd: 'YogaJustify.FLEX_END',\n    YGJustifyFlexStart: 'YogaJustify.FLEX_START',\n    YGJustifySpaceAround: 'YogaJustify.SPACE_AROUND',\n    YGJustifySpaceBetween: 'YogaJustify.SPACE_BETWEEN',\n    YGJustifySpaceEvenly: 'YogaJustify.SPACE_EVENLY',\n    YGOverflowHidden: 'YogaOverflow.HIDDEN',\n    YGOverflowVisible: 'YogaOverflow.VISIBLE',\n    YGOverflowScroll: 'YogaOverflow.SCROLL',\n    YGPositionTypeAbsolute: 'YogaPositionType.ABSOLUTE',\n    YGPositionTypeRelative: 'YogaPositionType.RELATIVE',\n    YGPositionTypeStatic: 'YogaPositionType.STATIC',\n    YGWrapNoWrap: 'YogaWrap.NO_WRAP',\n    YGWrapWrap: 'YogaWrap.WRAP',\n    YGWrapWrapReverse: 'YogaWrap.WRAP_REVERSE',\n    YGDisplayFlex: 'YogaDisplay.FLEX',\n    YGDisplayNone: 'YogaDisplay.NONE',\n    YGDisplayContents: 'YogaDisplay.CONTENTS',\n    YGBoxSizingBorderBox: 'YogaBoxSizing.BORDER_BOX',\n    YGBoxSizingContentBox: 'YogaBoxSizing.CONTENT_BOX',\n  };\n\n  private tr(value: string): string {\n    return JavaEmitter.enumMap[value] ?? value;\n  }\n\n  constructor() {\n    super('  ');\n  }\n\n  emitCommentHeader(fixtureName: string): void {\n    this.push([\n      '/*',\n      ' * Copyright (c) Meta Platforms, Inc. and affiliates.',\n      ' *',\n      ' * This source code is licensed under the MIT license found in the',\n      ' * LICENSE file in the root directory of this source tree.',\n      ' *',\n      ' * MAGIC_PLACEHOLDER',\n      ' * generated by gentest/src/GentestDriver.ts from gentest/fixtures/' +\n        fixtureName +\n        '.html',\n      ' */',\n      '',\n    ]);\n  }\n\n  emitPrologue(fixtureName: string): void {\n    this.push([\n      'package com.facebook.yoga;',\n      '',\n      'import static org.junit.Assert.assertEquals;',\n      '',\n      'import org.junit.Ignore;',\n      'import org.junit.Test;',\n      'import org.junit.runner.RunWith;',\n      'import org.junit.runners.Parameterized;',\n      'import com.facebook.yoga.utils.TestUtils;',\n      '',\n      '@RunWith(Parameterized.class)',\n      'public class ' + fixtureName + ' {',\n    ]);\n    this.pushIndent();\n    this.push([\n      '@Parameterized.Parameters(name = \"{0}\")',\n      'public static Iterable<TestParametrization.NodeFactory> nodeFactories() {',\n    ]);\n    this.pushIndent();\n    this.push('return TestParametrization.nodeFactories();');\n    this.popIndent();\n    this.push('}');\n    this.push([\n      '',\n      '@Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;',\n      '',\n    ]);\n  }\n\n  emitTestPrologue(\n    name: string,\n    experiments: string[],\n    disabled: boolean,\n  ): void {\n    this.push('@Test');\n    if (disabled) {\n      this.push('@Ignore');\n    }\n    this.push('public void test_' + name + '() {');\n    this.pushIndent();\n\n    this.push('YogaConfig config = YogaConfigFactory.create();');\n    for (const experiment of experiments) {\n      this.push(\n        'config.setExperimentalFeatureEnabled(YogaExperimentalFeature.' +\n          toJavaUpper(experiment) +\n          ', true);',\n      );\n    }\n    this.push('');\n  }\n\n  emitTestTreePrologue(nodeName: string): void {\n    this.push('final YogaNode ' + nodeName + ' = createNode(config);');\n  }\n\n  emitTestEpilogue(_experiments: string[]): void {\n    this.popIndent();\n    this.push(['}', '']);\n  }\n\n  emitEpilogue(): void {\n    this.push('private YogaNode createNode(YogaConfig config) {');\n    this.pushIndent();\n    this.push('return mNodeFactory.create(config);');\n    this.popIndent();\n    this.push('}');\n    this.popIndent();\n    this.push(['}', '']);\n  }\n\n  assertEQ(v0: number, v1: string): void {\n    this.push('assertEquals(' + v0 + 'f, ' + v1 + ', 0.0f);');\n  }\n\n  layoutGetLeft(node: string): string {\n    return node + '.getLayoutX()';\n  }\n\n  layoutGetTop(node: string): string {\n    return node + '.getLayoutY()';\n  }\n\n  layoutGetWidth(node: string): string {\n    return node + '.getLayoutWidth()';\n  }\n\n  layoutGetHeight(node: string): string {\n    return node + '.getLayoutHeight()';\n  }\n\n  insertChild(parent: string, child: string, index: number): void {\n    this.push(parent + '.addChildAt(' + child + ', ' + index + ');');\n  }\n\n  calculateLayout(\n    node: string,\n    direction: string,\n    _experiments: string[],\n  ): void {\n    this.push(node + '.setDirection(' + this.tr(direction) + ');');\n    this.push(\n      node +\n        '.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);',\n    );\n  }\n\n  setMeasureFunc(node: string, text: string, _flexDirection: string): void {\n    this.push(`${node}.setData(\"${text}\");`);\n    this.push(\n      `${node}.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());`,\n    );\n  }\n\n  setDirection(node: string, value: string): void {\n    this.push(node + '.setDirection(' + this.tr(value) + ');');\n  }\n\n  setFlexDirection(node: string, value: string): void {\n    this.push(node + '.setFlexDirection(' + this.tr(value) + ');');\n  }\n\n  setJustifyContent(node: string, value: string): void {\n    this.push(node + '.setJustifyContent(' + this.tr(value) + ');');\n  }\n\n  setAlignContent(node: string, value: string): void {\n    this.push(node + '.setAlignContent(' + this.tr(value) + ');');\n  }\n\n  setAlignItems(node: string, value: string): void {\n    this.push(node + '.setAlignItems(' + this.tr(value) + ');');\n  }\n\n  setAlignSelf(node: string, value: string): void {\n    this.push(node + '.setAlignSelf(' + this.tr(value) + ');');\n  }\n\n  setPositionType(node: string, value: string): void {\n    this.push(node + '.setPositionType(' + this.tr(value) + ');');\n  }\n\n  setFlexWrap(node: string, value: string): void {\n    this.push(node + '.setWrap(' + this.tr(value) + ');');\n  }\n\n  setOverflow(node: string, value: string): void {\n    this.push(node + '.setOverflow(' + this.tr(value) + ');');\n  }\n\n  setDisplay(node: string, value: string): void {\n    this.push(node + '.setDisplay(' + this.tr(value) + ');');\n  }\n\n  setBoxSizing(node: string, value: string): void {\n    this.push(node + '.setBoxSizing(' + this.tr(value) + ');');\n  }\n\n  setFlexGrow(node: string, value: string): void {\n    this.push(node + '.setFlexGrow(' + value + 'f);');\n  }\n\n  setFlexShrink(node: string, value: string): void {\n    this.push(node + '.setFlexShrink(' + value + 'f);');\n  }\n\n  setFlexBasis(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setFlexBasis' + suffix + '();');\n    } else {\n      this.push(node + '.setFlexBasis' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setWidth' + suffix + '();');\n    } else {\n      this.push(node + '.setWidth' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setHeight' + suffix + '();');\n    } else {\n      this.push(node + '.setHeight' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setMinWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setMinWidth' + suffix + '();');\n    } else {\n      this.push(node + '.setMinWidth' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setMinHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setMinHeight' + suffix + '();');\n    } else {\n      this.push(node + '.setMinHeight' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setMaxWidth(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setMaxWidth' + suffix + '();');\n    } else {\n      this.push(node + '.setMaxWidth' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setMaxHeight(node: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (\n      suffix === 'Auto' ||\n      suffix === 'MaxContent' ||\n      suffix === 'FitContent' ||\n      suffix === 'Stretch'\n    ) {\n      this.push(node + '.setMaxHeight' + suffix + '();');\n    } else {\n      this.push(node + '.setMaxHeight' + suffix + '(' + v + 'f);');\n    }\n  }\n\n  setMargin(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (suffix === 'Auto') {\n      this.push(node + '.setMarginAuto(' + this.tr(edge) + ');');\n    } else {\n      this.push(\n        node + '.setMargin' + suffix + '(' + this.tr(edge) + ', ' + v + 'f);',\n      );\n    }\n  }\n\n  setPadding(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    this.push(\n      node + '.setPadding' + suffix + '(' + this.tr(edge) + ', ' + v + ');',\n    );\n  }\n\n  setPosition(node: string, edge: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    if (suffix === 'Auto') {\n      this.push(node + '.setPositionAuto(' + this.tr(edge) + ');');\n    } else {\n      this.push(\n        node + '.setPosition' + suffix + '(' + this.tr(edge) + ', ' + v + 'f);',\n      );\n    }\n  }\n\n  setBorder(node: string, edge: string, value: ValueWithUnit): void {\n    const v = valueWithUnitToString(value);\n    this.push(node + '.setBorder(' + this.tr(edge) + ', ' + v + 'f);');\n  }\n\n  setGap(node: string, gutter: string, value: ValueWithUnit): void {\n    const suffix = toMethodName(value);\n    const v = valueWithUnitToString(value);\n    this.push(\n      node + '.setGap' + suffix + '(' + this.tr(gutter) + ', ' + v + 'f);',\n    );\n  }\n\n  setAspectRatio(node: string, value: ValueWithUnit): void {\n    const v = valueWithUnitToString(value);\n    this.push(node + '.setAspectRatio(' + v + 'f);');\n  }\n}\n"
  },
  {
    "path": "gentest/src/emitters/JavascriptEmitter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport Emitter from './Emitter.ts';\nimport type {ValueWithUnit} from '../Types.ts';\n\nfunction toValueJavascript(value: ValueWithUnit): string {\n  switch (value.type) {\n    case 'points':\n      return String(value.value);\n    case 'percent':\n      return JSON.stringify(value.value + '%');\n    case 'auto':\n      return '\"auto\"';\n    case 'max-content':\n      return '\"max-content\"';\n    case 'fit-content':\n      return '\"fit-content\"';\n    case 'stretch':\n      return '\"stretch\"';\n    case 'undefined':\n      return 'undefined';\n  }\n}\n\nexport class JavascriptEmitter extends Emitter {\n  private static enumMap: Record<string, string> = {\n    YGAlignAuto: 'Align.Auto',\n    YGAlignCenter: 'Align.Center',\n    YGAlignFlexEnd: 'Align.FlexEnd',\n    YGAlignFlexStart: 'Align.FlexStart',\n    YGAlignStretch: 'Align.Stretch',\n    YGAlignSpaceBetween: 'Align.SpaceBetween',\n    YGAlignSpaceAround: 'Align.SpaceAround',\n    YGAlignSpaceEvenly: 'Align.SpaceEvenly',\n    YGAlignBaseline: 'Align.Baseline',\n    YGDirectionInherit: 'Direction.Inherit',\n    YGDirectionLTR: 'Direction.LTR',\n    YGDirectionRTL: 'Direction.RTL',\n    YGEdgeBottom: 'Edge.Bottom',\n    YGEdgeEnd: 'Edge.End',\n    YGEdgeLeft: 'Edge.Left',\n    YGEdgeRight: 'Edge.Right',\n    YGEdgeStart: 'Edge.Start',\n    YGEdgeTop: 'Edge.Top',\n    YGEdgeAll: 'Edge.All',\n    YGEdgeVertical: 'Edge.Vertical',\n    YGEdgeHorizontal: 'Edge.Horizontal',\n    YGGutterAll: 'Gutter.All',\n    YGGutterColumn: 'Gutter.Column',\n    YGGutterRow: 'Gutter.Row',\n    YGFlexDirectionColumn: 'FlexDirection.Column',\n    YGFlexDirectionColumnReverse: 'FlexDirection.ColumnReverse',\n    YGFlexDirectionRow: 'FlexDirection.Row',\n    YGFlexDirectionRowReverse: 'FlexDirection.RowReverse',\n    YGJustifyCenter: 'Justify.Center',\n    YGJustifyFlexEnd: 'Justify.FlexEnd',\n    YGJustifyFlexStart: 'Justify.FlexStart',\n    YGJustifySpaceAround: 'Justify.SpaceAround',\n    YGJustifySpaceBetween: 'Justify.SpaceBetween',\n    YGJustifySpaceEvenly: 'Justify.SpaceEvenly',\n    YGOverflowHidden: 'Overflow.Hidden',\n    YGOverflowVisible: 'Overflow.Visible',\n    YGOverflowScroll: 'Overflow.Scroll',\n    YGPositionTypeAbsolute: 'PositionType.Absolute',\n    YGPositionTypeRelative: 'PositionType.Relative',\n    YGPositionTypeStatic: 'PositionType.Static',\n    YGWrapNoWrap: 'Wrap.NoWrap',\n    YGWrapWrap: 'Wrap.Wrap',\n    YGWrapWrapReverse: 'Wrap.WrapReverse',\n    YGDisplayFlex: 'Display.Flex',\n    YGDisplayNone: 'Display.None',\n    YGDisplayContents: 'Display.Contents',\n    YGBoxSizingBorderBox: 'BoxSizing.BorderBox',\n    YGBoxSizingContentBox: 'BoxSizing.ContentBox',\n  };\n\n  private tr(value: string): string {\n    return JavascriptEmitter.enumMap[value] ?? value;\n  }\n\n  constructor() {\n    super('  ');\n  }\n\n  emitCommentHeader(fixtureName: string): void {\n    this.push([\n      '/**',\n      ' * Copyright (c) Meta Platforms, Inc. and affiliates.',\n      ' *',\n      ' * This source code is licensed under the MIT license found in the',\n      ' * LICENSE file in the root directory of this source tree.',\n      ' *',\n      ' * MAGIC_PLACEHOLDER',\n      ' * generated by gentest/src/GentestDriver.ts from gentest/fixtures/' +\n        fixtureName +\n        '.html',\n      ' */',\n      '',\n    ]);\n  }\n\n  emitPrologue(_fixtureName: string): void {\n    this.push(\"import { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\");\n    this.push(\"import Yoga from 'yoga-layout';\");\n    this.push('import {');\n    this.pushIndent();\n    this.push('Align,');\n    this.push('BoxSizing,');\n    this.push('Direction,');\n    this.push('Display,');\n    this.push('Edge,');\n    this.push('Errata,');\n    this.push('ExperimentalFeature,');\n    this.push('FlexDirection,');\n    this.push('Gutter,');\n    this.push('Justify,');\n    this.push('MeasureMode,');\n    this.push('Overflow,');\n    this.push('PositionType,');\n    this.push('Unit,');\n    this.push('Wrap,');\n    this.popIndent();\n    this.push(\"} from 'yoga-layout';\");\n    this.push('');\n  }\n\n  emitTestPrologue(\n    name: string,\n    experiments: string[],\n    disabled: boolean,\n  ): void {\n    const testFn = disabled ? 'test.skip' : 'test';\n    this.push(`${testFn}('${name}', () => {`);\n    this.pushIndent();\n    this.push('const config = Yoga.Config.create();');\n    this.push('');\n\n    if (experiments.length > 0) {\n      for (const experiment of experiments) {\n        this.push(\n          `config.setExperimentalFeatureEnabled(ExperimentalFeature.${experiment}, true);`,\n        );\n      }\n      this.push('');\n    }\n  }\n\n  emitTestTreePrologue(nodeName: string): void {\n    if (nodeName === 'root') {\n      this.push('const root = Yoga.Node.create(config);');\n    } else {\n      this.push(`const ${nodeName} = Yoga.Node.create(config);`);\n    }\n  }\n\n  emitTestEpilogue(_experiments: string[]): void {\n    this.popIndent();\n    this.push('});');\n  }\n\n  emitEpilogue(): void {\n    this.push('');\n  }\n\n  assertEQ(v0: number, v1: string): void {\n    this.push(`expect(${v1}).toBe(${v0});`);\n  }\n\n  layoutGetLeft(node: string): string {\n    return node + '.getComputedLeft()';\n  }\n\n  layoutGetTop(node: string): string {\n    return node + '.getComputedTop()';\n  }\n\n  layoutGetWidth(node: string): string {\n    return node + '.getComputedWidth()';\n  }\n\n  layoutGetHeight(node: string): string {\n    return node + '.getComputedHeight()';\n  }\n\n  insertChild(parent: string, child: string, index: number): void {\n    this.push(parent + '.insertChild(' + child + ', ' + index + ');');\n  }\n\n  calculateLayout(\n    node: string,\n    direction: string,\n    _experiments: string[],\n  ): void {\n    this.push(\n      node +\n        '.calculateLayout(undefined, undefined, ' +\n        this.tr(direction) +\n        ');',\n    );\n  }\n\n  setMeasureFunc(node: string, text: string, flexDirection: string): void {\n    this.push(\n      `${node}.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"${text}\", flexDirection: ${this.tr(\n        flexDirection,\n      )}}));`,\n    );\n  }\n\n  setDirection(node: string, value: string): void {\n    this.push(node + '.setDirection(' + this.tr(value) + ');');\n  }\n\n  setFlexDirection(node: string, value: string): void {\n    this.push(node + '.setFlexDirection(' + this.tr(value) + ');');\n  }\n\n  setJustifyContent(node: string, value: string): void {\n    this.push(node + '.setJustifyContent(' + this.tr(value) + ');');\n  }\n\n  setAlignContent(node: string, value: string): void {\n    this.push(node + '.setAlignContent(' + this.tr(value) + ');');\n  }\n\n  setAlignItems(node: string, value: string): void {\n    this.push(node + '.setAlignItems(' + this.tr(value) + ');');\n  }\n\n  setAlignSelf(node: string, value: string): void {\n    this.push(node + '.setAlignSelf(' + this.tr(value) + ');');\n  }\n\n  setPositionType(node: string, value: string): void {\n    this.push(node + '.setPositionType(' + this.tr(value) + ');');\n  }\n\n  setFlexWrap(node: string, value: string): void {\n    this.push(node + '.setFlexWrap(' + this.tr(value) + ');');\n  }\n\n  setOverflow(node: string, value: string): void {\n    this.push(node + '.setOverflow(' + this.tr(value) + ');');\n  }\n\n  setDisplay(node: string, value: string): void {\n    this.push(node + '.setDisplay(' + this.tr(value) + ');');\n  }\n\n  setBoxSizing(node: string, value: string): void {\n    this.push(node + '.setBoxSizing(' + this.tr(value) + ');');\n  }\n\n  setFlexGrow(node: string, value: string): void {\n    this.push(node + '.setFlexGrow(' + value + ');');\n  }\n\n  setFlexShrink(node: string, value: string): void {\n    this.push(node + '.setFlexShrink(' + value + ');');\n  }\n\n  setFlexBasis(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setFlexBasis(' + toValueJavascript(value) + ');');\n  }\n\n  setWidth(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setWidth(' + toValueJavascript(value) + ');');\n  }\n\n  setHeight(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setHeight(' + toValueJavascript(value) + ');');\n  }\n\n  setMinWidth(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setMinWidth(' + toValueJavascript(value) + ');');\n  }\n\n  setMinHeight(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setMinHeight(' + toValueJavascript(value) + ');');\n  }\n\n  setMaxWidth(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setMaxWidth(' + toValueJavascript(value) + ');');\n  }\n\n  setMaxHeight(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setMaxHeight(' + toValueJavascript(value) + ');');\n  }\n\n  setMargin(node: string, edge: string, value: ValueWithUnit): void {\n    this.push(\n      node +\n        '.setMargin(' +\n        this.tr(edge) +\n        ', ' +\n        toValueJavascript(value) +\n        ');',\n    );\n  }\n\n  setPadding(node: string, edge: string, value: ValueWithUnit): void {\n    this.push(\n      node +\n        '.setPadding(' +\n        this.tr(edge) +\n        ', ' +\n        toValueJavascript(value) +\n        ');',\n    );\n  }\n\n  setPosition(node: string, edge: string, value: ValueWithUnit): void {\n    const v = toValueJavascript(value);\n    if (v === '\"auto\"') {\n      this.push(node + '.setPositionAuto(' + this.tr(edge) + ');');\n    } else {\n      this.push(node + '.setPosition(' + this.tr(edge) + ', ' + v + ');');\n    }\n  }\n\n  setBorder(node: string, edge: string, value: ValueWithUnit): void {\n    this.push(\n      node +\n        '.setBorder(' +\n        this.tr(edge) +\n        ', ' +\n        toValueJavascript(value) +\n        ');',\n    );\n  }\n\n  setGap(node: string, gutter: string, value: ValueWithUnit): void {\n    this.push(\n      node +\n        '.setGap(' +\n        this.tr(gutter) +\n        ', ' +\n        toValueJavascript(value) +\n        ');',\n    );\n  }\n\n  setAspectRatio(node: string, value: ValueWithUnit): void {\n    this.push(node + '.setAspectRatio(' + toValueJavascript(value) + ');');\n  }\n}\n"
  },
  {
    "path": "gentest/src/types.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport type ValueWithUnit =\n  | {type: 'points'; value: number}\n  | {type: 'percent'; value: number}\n  | {type: 'auto'}\n  | {type: 'max-content'}\n  | {type: 'fit-content'}\n  | {type: 'stretch'}\n  | {type: 'undefined'};\n\nexport type ParsedStyles = Map<string, string>;\n\nexport interface LayoutNode {\n  id: string;\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  styleAttr: string;\n  experiments: string[];\n  disabled: boolean;\n  innerText: string;\n  children: LayoutNode[];\n}\n\nexport interface TestCase {\n  name: string;\n  ltrLayout: LayoutNode;\n  rtlLayout: LayoutNode;\n  styleAttr: string;\n  experiments: string[];\n  disabled: boolean;\n}\n"
  },
  {
    "path": "gentest/test-template.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <style>\n    @font-face {\n      font-family: 'Ahem';\n      src: url('%FONT_PATH%') format('truetype');\n    }\n    body {\n      padding: 0;\n      margin: 0;\n      font: 10px/1 Ahem;\n      font-weight: 100;\n    }\n    div, span {\n      box-sizing: border-box;\n      position: relative;\n      border: 0 solid black;\n      margin: 0;\n      padding: 0;\n      display: flex;\n      flex-direction: column;\n      align-items: stretch;\n      align-content: flex-start;\n      justify-content: flex-start;\n      flex-shrink: 0;\n    }\n    body > div {\n      position: absolute;\n    }\n    body > div > * {\n      position: absolute;\n    }\n  </style>\n</head>\n<body>\n  <div id=\"container\">\n    %FIXTURE%\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "gentest/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowImportingTsExtensions\": true,\n    \"esModuleInterop\": true,\n    \"lib\": [\"es2023\"],\n    \"moduleResolution\": \"nodenext\",\n    \"module\": \"nodenext\",\n    \"noEmit\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"target\": \"es2022\"\n  }\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-9.3.1-bin.zip\nnetworkTimeout=10000\nvalidateDistributionUrl=true\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "#\n#  Copyright (c) Facebook, Inc. and its affiliates.\n#\n#  This source code is licensed under the MIT license found in the LICENSE\n#  file in the root directory of this source tree.\n#\n\n# Project-wide Gradle settings.\n\nandroid.useAndroidX=true\n\norg.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8\n\nVERSION_NAME=0.0.0\n"
  },
  {
    "path": "gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# SPDX-License-Identifier: Apache-2.0\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\n# This is normally unused\n# shellcheck disable=SC2034\nAPP_BASE_NAME=${0##*/}\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\nAPP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    if ! command -v java >/dev/null 2>&1\n    then\n        die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Collect all arguments for the java command:\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n#     and any embedded shellness will be escaped.\n#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n#     treated as '${Hostname}' itself on the command line.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Stop when \"xargs\" is not available.\nif ! command -v xargs >/dev/null 2>&1\nthen\n    die \"xargs is not available\"\nfi\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n@rem SPDX-License-Identifier: Apache-2.0\r\n@rem\r\n\r\n@if \"%DEBUG%\"==\"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\r\n@rem This is normally unused\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif %ERRORLEVEL% equ 0 goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif %ERRORLEVEL% equ 0 goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nset EXIT_CODE=%ERRORLEVEL%\r\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\r\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\r\nexit /b %EXIT_CODE%\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "java/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!--\n  Copyright (c) Meta Platforms, Inc. and affiliates.\n\n  This source code is licensed under the MIT license found in the\n  LICENSE file in the root directory of this source tree.\n-->\n\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <application/>\n\n</manifest>\n"
  },
  {
    "path": "java/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(yogajni)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\nset(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)\ninclude(${YOGA_ROOT}/cmake/project-defaults.cmake)\n\nadd_subdirectory(${YOGA_ROOT}/yoga ${CMAKE_CURRENT_BINARY_DIR}/yoga)\n\nfile(GLOB SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/jni/*.cpp)\nfile(GLOB VERSION_SCRIPT CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/yogajni.version)\n\nadd_library(yoga SHARED ${SOURCES})\ntarget_link_libraries(yoga yogacore)\ntarget_link_options(yoga PRIVATE -Wl,--version-script=${VERSION_SCRIPT})\n"
  },
  {
    "path": "java/build.gradle.kts",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nplugins {\n  id(\"com.android.library\")\n  id(\"maven-publish\")\n  id(\"signing\")\n  id(\"org.jetbrains.kotlin.android\")\n}\n\ngroup = \"com.facebook.yoga\"\n\nandroid {\n  namespace = \"com.facebook.yoga\"\n  compileSdk = 36\n  buildToolsVersion = \"36.0.0\"\n  ndkVersion = \"27.1.12297006\"\n\n  defaultConfig {\n    minSdk = 21\n    consumerProguardFiles(\"proguard-rules.pro\")\n\n    ndk { abiFilters.addAll(setOf(\"x86\", \"x86_64\", \"armeabi-v7a\", \"arm64-v8a\")) }\n    externalNativeBuild { cmake { arguments(\"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON\") } }\n  }\n\n  externalNativeBuild { cmake { path(\"CMakeLists.txt\") } }\n\n  compileOptions {\n    targetCompatibility(JavaVersion.VERSION_17)\n    sourceCompatibility(JavaVersion.VERSION_17)\n  }\n\n  sourceSets {\n    named(\"main\") {\n      java.srcDir(\"com\")\n      manifest.srcFile(\"AndroidManifest.xml\")\n      res.srcDir(\"res\")\n    }\n  }\n\n  kotlinOptions { jvmTarget = \"17\" }\n\n  publishing {\n    multipleVariants {\n      withSourcesJar()\n      withJavadocJar()\n      includeBuildTypeValues(\"debug\", \"release\")\n    }\n  }\n}\n\ndependencies {\n  implementation(\"com.google.code.findbugs:jsr305:3.0.2\")\n  implementation(\"com.facebook.soloader:soloader:0.12.1\")\n  implementation(\"androidx.core:core-ktx:1.16.0\")\n  testImplementation(\"junit:junit:4.13.2\")\n}\n\nversion =\n    if (\"USE_SNAPSHOT\".byProperty.toBoolean()) {\n      \"${\"VERSION_NAME\".byProperty}-SNAPSHOT\"\n    } else {\n      \"VERSION_NAME\".byProperty.toString()\n    }\n\npublishing {\n  publications {\n    register<MavenPublication>(\"default\") {\n      groupId = project.group.toString()\n      artifactId = project.name\n      version = project.version.toString()\n      afterEvaluate { from(components[\"default\"]) }\n      pom {\n        description.set(\n            \"An embeddable and performant flexbox layout engine with bindings for multiple languages\"\n        )\n        name.set(project.name)\n        url.set(\"https://github.com/facebook/yoga.git\")\n        licenses {\n          license {\n            name.set(\"MIT License\")\n            url.set(\"https://github.com/facebook/yoga/blob/main/LICENSE\")\n            distribution.set(\"repo\")\n          }\n        }\n        developers {\n          developer {\n            id.set(\"Meta Open Source\")\n            name.set(\"Meta Open Source\")\n            email.set(\"opensource@meta.com\")\n          }\n        }\n        scm { url.set(\"scm:git:git@github.com:facebook/yoga.git\") }\n      }\n    }\n  }\n}\n\nval signingKey = \"SIGNING_KEY\".byProperty\nval signingPwd = \"SIGNING_PWD\".byProperty\n\nif (signingKey.isNullOrBlank() || signingPwd.isNullOrBlank()) {\n  logger.info(\"Signing disabled as the GPG key was not found\")\n} else {\n  logger.info(\"GPG Key found - Signing enabled\")\n}\n\nsigning {\n  useInMemoryPgpKeys(signingKey, signingPwd)\n  sign(publishing.publications)\n  isRequired = !(signingKey.isNullOrBlank() || signingPwd.isNullOrBlank())\n}\n\n// Fix for https://youtrack.jetbrains.com/issue/KT-46466/\n// On Gradle 8+, the signing task is not correctly wired to the publishing tasks.\n// This requires a fix on KGP that is currently pending.\nval signingTasks = tasks.withType<Sign>()\n\ntasks.withType<AbstractPublishToMaven>().configureEach { dependsOn(signingTasks) }\n\nval String.byProperty: String?\n  get() = providers.gradleProperty(this).orNull\n"
  },
  {
    "path": "java/com/facebook/yoga/LayoutPassReason.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic enum class LayoutPassReason(public val intValue: Int) {\n  INITIAL(0),\n  ABS_LAYOUT(1),\n  STRETCH(2),\n  MULTILINE_STRETCH(3),\n  FLEX_LAYOUT(4),\n  MEASURE(5),\n  ABS_MEASURE(6),\n  FLEX_MEASURE(7);\n\n  public companion object {\n    @JvmStatic\n    public fun fromInt(value: Int): LayoutPassReason =\n        when (value) {\n          0 -> INITIAL\n          1 -> ABS_LAYOUT\n          2 -> STRETCH\n          3 -> MULTILINE_STRETCH\n          4 -> FLEX_LAYOUT\n          5 -> MEASURE\n          6 -> ABS_MEASURE\n          7 -> FLEX_MEASURE\n          else -> throw IllegalArgumentException(\"Unknown enum value: $value\")\n        }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaAlign.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaAlign {\n  AUTO(0),\n  FLEX_START(1),\n  CENTER(2),\n  FLEX_END(3),\n  STRETCH(4),\n  BASELINE(5),\n  SPACE_BETWEEN(6),\n  SPACE_AROUND(7),\n  SPACE_EVENLY(8),\n  START(9),\n  END(10);\n\n  private final int mIntValue;\n\n  YogaAlign(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaAlign fromInt(int value) {\n    switch (value) {\n      case 0: return AUTO;\n      case 1: return FLEX_START;\n      case 2: return CENTER;\n      case 3: return FLEX_END;\n      case 4: return STRETCH;\n      case 5: return BASELINE;\n      case 6: return SPACE_BETWEEN;\n      case 7: return SPACE_AROUND;\n      case 8: return SPACE_EVENLY;\n      case 9: return START;\n      case 10: return END;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaBaselineFunction.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic fun interface YogaBaselineFunction {\n  /**\n   * Return the baseline of the node in points. When no baseline function is set the baseline\n   * default to the computed height of the node.\n   */\n  public fun baseline(node: YogaNode, width: Float, height: Float): Float\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaBoxSizing.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaBoxSizing {\n  BORDER_BOX(0),\n  CONTENT_BOX(1);\n\n  private final int mIntValue;\n\n  YogaBoxSizing(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaBoxSizing fromInt(int value) {\n    switch (value) {\n      case 0: return BORDER_BOX;\n      case 1: return CONTENT_BOX;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaConfig.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic abstract class YogaConfig {\n  public abstract fun setExperimentalFeatureEnabled(\n      feature: YogaExperimentalFeature,\n      enabled: Boolean,\n  )\n\n  public abstract fun setUseWebDefaults(useWebDefaults: Boolean)\n\n  public abstract fun setPointScaleFactor(pixelsInPoint: Float)\n\n  public abstract fun setErrata(errata: YogaErrata)\n\n  public abstract fun getErrata(): YogaErrata\n\n  public abstract fun setLogger(logger: YogaLogger?)\n\n  public abstract fun getLogger(): YogaLogger?\n\n  protected abstract fun getNativePointer(): Long\n\n  public companion object {\n    public var SPACING_TYPE: Int = 1\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaConfigFactory.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic object YogaConfigFactory {\n  @JvmStatic public fun create(): YogaConfig = YogaConfigJNIFinalizer()\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaConfigJNIBase.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\nimport com.facebook.yoga.YogaNative.jni_YGConfigGetErrataJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigNewJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigSetErrataJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigSetExperimentalFeatureEnabledJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigSetLoggerJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigSetPointScaleFactorJNI\nimport com.facebook.yoga.YogaNative.jni_YGConfigSetUseWebDefaultsJNI\n\npublic abstract class YogaConfigJNIBase\nprivate constructor(@JvmField protected var nativePointer: Long) : YogaConfig() {\n  private var _logger: YogaLogger? = null\n\n  init {\n    check(nativePointer != 0L) { \"Failed to allocate native memory\" }\n  }\n\n  internal constructor() : this(jni_YGConfigNewJNI())\n\n  internal constructor(useVanillaJNI: Boolean) : this(jni_YGConfigNewJNI())\n\n  public override fun setExperimentalFeatureEnabled(\n      feature: YogaExperimentalFeature,\n      enabled: Boolean,\n  ) {\n    YogaNative.jni_YGConfigSetExperimentalFeatureEnabledJNI(\n        nativePointer,\n        feature.intValue(),\n        enabled,\n    )\n  }\n\n  public override fun setUseWebDefaults(useWebDefaults: Boolean) {\n    YogaNative.jni_YGConfigSetUseWebDefaultsJNI(nativePointer, useWebDefaults)\n  }\n\n  public override fun setPointScaleFactor(pixelsInPoint: Float) {\n    YogaNative.jni_YGConfigSetPointScaleFactorJNI(nativePointer, pixelsInPoint)\n  }\n\n  public override fun setErrata(errata: YogaErrata) {\n    YogaNative.jni_YGConfigSetErrataJNI(nativePointer, errata.intValue())\n  }\n\n  public override fun getErrata(): YogaErrata =\n      YogaErrata.fromInt(YogaNative.jni_YGConfigGetErrataJNI(nativePointer))\n\n  public override fun setLogger(logger: YogaLogger?) {\n    _logger = logger\n    YogaNative.jni_YGConfigSetLoggerJNI(nativePointer, logger)\n  }\n\n  public override fun getLogger(): YogaLogger? = _logger\n\n  public override fun getNativePointer(): Long = nativePointer\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaConfigJNIFinalizer.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic class YogaConfigJNIFinalizer public constructor() : YogaConfigJNIBase() {\n\n  /*\n   * This is a valid use of finalize. No other mechanism is appropriate.\n   * YogaConfigJNIFinalizer exists specifically to release JNI-allocated native\n   * memory (via jni_YGConfigFreeJNI) when the Java object is garbage collected.\n   * This is the established pattern for JNI prevented leak classes in Yoga.\n   */\n  @Throws(Throwable::class)\n  protected fun finalize() {\n    freeNatives()\n  }\n\n  public fun freeNatives() {\n    if (nativePointer != 0L) {\n      val pointer = nativePointer\n      nativePointer = 0\n      YogaNative.jni_YGConfigFreeJNI(pointer)\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaConstants.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic object YogaConstants {\n  @JvmField public val UNDEFINED: Float = Float.NaN\n\n  @JvmStatic public fun isUndefined(value: Float): Boolean = value.compareTo(UNDEFINED) == 0\n\n  @JvmStatic public fun isUndefined(value: YogaValue): Boolean = value.unit == YogaUnit.UNDEFINED\n\n  @JvmStatic public fun getUndefined(): Float = UNDEFINED\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaDimension.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaDimension {\n  WIDTH(0),\n  HEIGHT(1);\n\n  private final int mIntValue;\n\n  YogaDimension(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaDimension fromInt(int value) {\n    switch (value) {\n      case 0: return WIDTH;\n      case 1: return HEIGHT;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaDirection.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga\n\npublic enum class YogaDirection(public val intValue: Int) {\n  INHERIT(0),\n  LTR(1),\n  RTL(2);\n\n  public fun intValue(): Int = intValue\n\n  public companion object {\n    @JvmStatic\n    public fun fromInt(value: Int): YogaDirection =\n        when (value) {\n          0 -> INHERIT\n          1 -> LTR\n          2 -> RTL\n          else -> throw IllegalArgumentException(\"Unknown enum value: $value\")\n        }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaDisplay.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaDisplay {\n  FLEX(0),\n  NONE(1),\n  CONTENTS(2),\n  GRID(3);\n\n  private final int mIntValue;\n\n  YogaDisplay(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaDisplay fromInt(int value) {\n    switch (value) {\n      case 0: return FLEX;\n      case 1: return NONE;\n      case 2: return CONTENTS;\n      case 3: return GRID;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaEdge.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaEdge {\n  LEFT(0),\n  TOP(1),\n  RIGHT(2),\n  BOTTOM(3),\n  START(4),\n  END(5),\n  HORIZONTAL(6),\n  VERTICAL(7),\n  ALL(8);\n\n  private final int mIntValue;\n\n  YogaEdge(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaEdge fromInt(int value) {\n    switch (value) {\n      case 0: return LEFT;\n      case 1: return TOP;\n      case 2: return RIGHT;\n      case 3: return BOTTOM;\n      case 4: return START;\n      case 5: return END;\n      case 6: return HORIZONTAL;\n      case 7: return VERTICAL;\n      case 8: return ALL;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaErrata.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaErrata {\n  NONE(0),\n  STRETCH_FLEX_BASIS(1),\n  ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING(2),\n  ABSOLUTE_PERCENT_AGAINST_INNER_SIZE(4),\n  ALL(2147483647),\n  CLASSIC(2147483646);\n\n  private final int mIntValue;\n\n  YogaErrata(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaErrata fromInt(int value) {\n    switch (value) {\n      case 0: return NONE;\n      case 1: return STRETCH_FLEX_BASIS;\n      case 2: return ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING;\n      case 4: return ABSOLUTE_PERCENT_AGAINST_INNER_SIZE;\n      case 2147483647: return ALL;\n      case 2147483646: return CLASSIC;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaExperimentalFeature.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaExperimentalFeature {\n  WEB_FLEX_BASIS(0),\n  FIX_FLEX_BASIS_FIT_CONTENT(1);\n\n  private final int mIntValue;\n\n  YogaExperimentalFeature(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaExperimentalFeature fromInt(int value) {\n    switch (value) {\n      case 0: return WEB_FLEX_BASIS;\n      case 1: return FIX_FLEX_BASIS_FIT_CONTENT;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaFlexDirection.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaFlexDirection {\n  COLUMN(0),\n  COLUMN_REVERSE(1),\n  ROW(2),\n  ROW_REVERSE(3);\n\n  private final int mIntValue;\n\n  YogaFlexDirection(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaFlexDirection fromInt(int value) {\n    switch (value) {\n      case 0: return COLUMN;\n      case 1: return COLUMN_REVERSE;\n      case 2: return ROW;\n      case 3: return ROW_REVERSE;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaGridTrackType.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaGridTrackType {\n  AUTO(0),\n  POINTS(1),\n  PERCENT(2),\n  FR(3),\n  MINMAX(4);\n\n  private final int mIntValue;\n\n  YogaGridTrackType(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaGridTrackType fromInt(int value) {\n    switch (value) {\n      case 0: return AUTO;\n      case 1: return POINTS;\n      case 2: return PERCENT;\n      case 3: return FR;\n      case 4: return MINMAX;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaGutter.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaGutter {\n  COLUMN(0),\n  ROW(1),\n  ALL(2);\n\n  private final int mIntValue;\n\n  YogaGutter(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaGutter fromInt(int value) {\n    switch (value) {\n      case 0: return COLUMN;\n      case 1: return ROW;\n      case 2: return ALL;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaJustify.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaJustify {\n  AUTO(0),\n  FLEX_START(1),\n  CENTER(2),\n  FLEX_END(3),\n  SPACE_BETWEEN(4),\n  SPACE_AROUND(5),\n  SPACE_EVENLY(6),\n  STRETCH(7),\n  START(8),\n  END(9);\n\n  private final int mIntValue;\n\n  YogaJustify(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaJustify fromInt(int value) {\n    switch (value) {\n      case 0: return AUTO;\n      case 1: return FLEX_START;\n      case 2: return CENTER;\n      case 3: return FLEX_END;\n      case 4: return SPACE_BETWEEN;\n      case 5: return SPACE_AROUND;\n      case 6: return SPACE_EVENLY;\n      case 7: return STRETCH;\n      case 8: return START;\n      case 9: return END;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaLayoutType.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic enum class YogaLayoutType(public val intValue: Int) {\n  LAYOUT(0),\n  MEASURE(1),\n  CACHED_LAYOUT(2),\n  CACHED_MEASURE(3);\n\n  public companion object {\n    @JvmStatic\n    public fun fromInt(value: Int): YogaLayoutType =\n        when (value) {\n          0 -> LAYOUT\n          1 -> MEASURE\n          2 -> CACHED_LAYOUT\n          3 -> CACHED_MEASURE\n          else -> throw IllegalArgumentException(\"Unknown enum value: $value\")\n        }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaLogLevel.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\nimport com.facebook.yoga.annotations.DoNotStrip;\n\n@DoNotStrip\npublic enum YogaLogLevel {\n  ERROR(0),\n  WARN(1),\n  INFO(2),\n  DEBUG(3),\n  VERBOSE(4),\n  FATAL(5);\n\n  private final int mIntValue;\n\n  YogaLogLevel(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  @DoNotStrip\n  public static YogaLogLevel fromInt(int value) {\n    switch (value) {\n      case 0: return ERROR;\n      case 1: return WARN;\n      case 2: return INFO;\n      case 3: return DEBUG;\n      case 4: return VERBOSE;\n      case 5: return FATAL;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaLogger.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\nimport com.facebook.yoga.annotations.DoNotStrip\n\n/**\n * Interface for receiving logs from native layer. Use by setting YogaNode.setLogger(myLogger); See\n * YogaLogLevel for the different log levels.\n */\n@DoNotStrip\npublic fun interface YogaLogger {\n  @DoNotStrip public fun log(level: YogaLogLevel, message: String)\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaMeasureFunction.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic fun interface YogaMeasureFunction {\n  /** Return a value created by YogaMeasureOutput.make(width, height); */\n  public fun measure(\n      node: YogaNode,\n      width: Float,\n      widthMode: YogaMeasureMode,\n      height: Float,\n      heightMode: YogaMeasureMode,\n  ): Long\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaMeasureMode.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaMeasureMode {\n  UNDEFINED(0),\n  EXACTLY(1),\n  AT_MOST(2);\n\n  private final int mIntValue;\n\n  YogaMeasureMode(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaMeasureMode fromInt(int value) {\n    switch (value) {\n      case 0: return UNDEFINED;\n      case 1: return EXACTLY;\n      case 2: return AT_MOST;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaMeasureOutput.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\n/** Helpers for building measure output value. */\npublic object YogaMeasureOutput {\n  @JvmStatic\n  public fun make(width: Float, height: Float): Long {\n    val wBits = java.lang.Float.floatToRawIntBits(width)\n    val hBits = java.lang.Float.floatToRawIntBits(height)\n    return (wBits.toLong()) shl 32 or (hBits.toLong())\n  }\n\n  @JvmStatic\n  public fun make(width: Int, height: Int): Long = make(width.toFloat(), height.toFloat())\n\n  @JvmStatic\n  public fun getWidth(measureOutput: Long): Float =\n      java.lang.Float.intBitsToFloat((0xFFFFFFFFL and (measureOutput shr 32)).toInt())\n\n  @JvmStatic\n  public fun getHeight(measureOutput: Long): Float =\n      java.lang.Float.intBitsToFloat((0xFFFFFFFFL and measureOutput).toInt())\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNative.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\nimport com.facebook.soloader.SoLoader\nimport com.facebook.yoga.annotations.DoNotStrip\n\n@DoNotStrip\npublic object YogaNative {\n  init {\n    SoLoader.loadLibrary(\"yoga\")\n  }\n\n  // JNI methods that use Vanilla JNI\n  // YGConfig related\n  @JvmStatic public external fun jni_YGConfigNewJNI(): Long\n\n  @JvmStatic public external fun jni_YGConfigFreeJNI(nativePointer: Long)\n\n  @JvmStatic\n  public external fun jni_YGConfigSetExperimentalFeatureEnabledJNI(\n      nativePointer: Long,\n      feature: Int,\n      enabled: Boolean,\n  )\n\n  @JvmStatic\n  public external fun jni_YGConfigSetUseWebDefaultsJNI(nativePointer: Long, useWebDefaults: Boolean)\n\n  @JvmStatic\n  public external fun jni_YGConfigSetPointScaleFactorJNI(nativePointer: Long, pixelsInPoint: Float)\n\n  @JvmStatic public external fun jni_YGConfigSetErrataJNI(nativePointer: Long, errata: Int)\n\n  @JvmStatic public external fun jni_YGConfigGetErrataJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGConfigSetLoggerJNI(nativePointer: Long, logger: YogaLogger?)\n\n  // YGNode related\n  @JvmStatic public external fun jni_YGNodeNewJNI(): Long\n\n  @JvmStatic public external fun jni_YGNodeNewWithConfigJNI(configPointer: Long): Long\n\n  @JvmStatic public external fun jni_YGNodeFinalizeJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeResetJNI(nativePointer: Long)\n\n  @JvmStatic\n  public external fun jni_YGNodeInsertChildJNI(nativePointer: Long, childPointer: Long, index: Int)\n\n  @JvmStatic\n  public external fun jni_YGNodeSwapChildJNI(nativePointer: Long, childPointer: Long, index: Int)\n\n  @JvmStatic\n  public external fun jni_YGNodeSetIsReferenceBaselineJNI(\n      nativePointer: Long,\n      isReferenceBaseline: Boolean,\n  )\n\n  @JvmStatic public external fun jni_YGNodeIsReferenceBaselineJNI(nativePointer: Long): Boolean\n\n  @JvmStatic public external fun jni_YGNodeRemoveAllChildrenJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeRemoveChildJNI(nativePointer: Long, childPointer: Long)\n\n  @JvmStatic\n  public external fun jni_YGNodeCalculateLayoutJNI(\n      nativePointer: Long,\n      width: Float,\n      height: Float,\n      nativePointers: LongArray,\n      nodes: Array<YogaNodeJNIBase>,\n  )\n\n  @JvmStatic public external fun jni_YGNodeMarkDirtyJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeIsDirtyJNI(nativePointer: Long): Boolean\n\n  @JvmStatic\n  public external fun jni_YGNodeCopyStyleJNI(dstNativePointer: Long, srcNativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetDirectionJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetDirectionJNI(nativePointer: Long, direction: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexDirectionJNI(nativePointer: Long): Int\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetFlexDirectionJNI(nativePointer: Long, flexDirection: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetJustifyContentJNI(nativePointer: Long): Int\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetJustifyContentJNI(nativePointer: Long, justifyContent: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetAlignItemsJNI(nativePointer: Long): Int\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetAlignItemsJNI(nativePointer: Long, alignItems: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetAlignSelfJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetAlignSelfJNI(nativePointer: Long, alignSelf: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetAlignContentJNI(nativePointer: Long): Int\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetAlignContentJNI(nativePointer: Long, alignContent: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetPositionTypeJNI(nativePointer: Long): Int\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetPositionTypeJNI(nativePointer: Long, positionType: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetBoxSizingJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetBoxSizingJNI(nativePointer: Long, boxSizing: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexWrapJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexWrapJNI(nativePointer: Long, wrapType: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetOverflowJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetOverflowJNI(nativePointer: Long, overflow: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetDisplayJNI(nativePointer: Long): Int\n\n  @JvmStatic public external fun jni_YGNodeStyleSetDisplayJNI(nativePointer: Long, display: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexJNI(nativePointer: Long): Float\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexJNI(nativePointer: Long, flex: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexGrowJNI(nativePointer: Long): Float\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexGrowJNI(nativePointer: Long, flexGrow: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexShrinkJNI(nativePointer: Long): Float\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetFlexShrinkJNI(nativePointer: Long, flexShrink: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetFlexBasisJNI(nativePointer: Long): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetFlexBasisJNI(nativePointer: Long, flexBasis: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetFlexBasisPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexBasisAutoJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexBasisMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexBasisFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetFlexBasisStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetMarginJNI(nativePointer: Long, edge: Int): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMarginJNI(nativePointer: Long, edge: Int, margin: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMarginPercentJNI(\n      nativePointer: Long,\n      edge: Int,\n      percent: Float,\n  )\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMarginAutoJNI(nativePointer: Long, edge: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetPaddingJNI(nativePointer: Long, edge: Int): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetPaddingJNI(nativePointer: Long, edge: Int, padding: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetPaddingPercentJNI(\n      nativePointer: Long,\n      edge: Int,\n      percent: Float,\n  )\n\n  @JvmStatic public external fun jni_YGNodeStyleGetBorderJNI(nativePointer: Long, edge: Int): Float\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetBorderJNI(nativePointer: Long, edge: Int, border: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetPositionJNI(nativePointer: Long, edge: Int): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetPositionJNI(nativePointer: Long, edge: Int, position: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetPositionPercentJNI(\n      nativePointer: Long,\n      edge: Int,\n      percent: Float,\n  )\n\n  @JvmStatic public external fun jni_YGNodeStyleSetPositionAutoJNI(nativePointer: Long, edge: Int)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetWidthJNI(nativePointer: Long): Long\n\n  @JvmStatic public external fun jni_YGNodeStyleSetWidthJNI(nativePointer: Long, width: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetWidthPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetWidthAutoJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetWidthMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetWidthFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetWidthStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetHeightJNI(nativePointer: Long): Long\n\n  @JvmStatic public external fun jni_YGNodeStyleSetHeightJNI(nativePointer: Long, height: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetHeightPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetHeightAutoJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetHeightMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetHeightFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetHeightStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetMinWidthJNI(nativePointer: Long): Long\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinWidthJNI(nativePointer: Long, minWidth: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMinWidthPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinWidthMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinWidthFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinWidthStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetMinHeightJNI(nativePointer: Long): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMinHeightJNI(nativePointer: Long, minHeight: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMinHeightPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinHeightMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinHeightFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMinHeightStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetMaxWidthJNI(nativePointer: Long): Long\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxWidthJNI(nativePointer: Long, maxWidth: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMaxWidthPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxWidthMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxWidthFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxWidthStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetMaxHeightJNI(nativePointer: Long): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMaxHeightJNI(nativePointer: Long, maxheight: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetMaxHeightPercentJNI(nativePointer: Long, percent: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxHeightMaxContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxHeightFitContentJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleSetMaxHeightStretchJNI(nativePointer: Long)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetAspectRatioJNI(nativePointer: Long): Float\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetAspectRatioJNI(nativePointer: Long, aspectRatio: Float)\n\n  @JvmStatic public external fun jni_YGNodeStyleGetGapJNI(nativePointer: Long, gutter: Int): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetGapJNI(nativePointer: Long, gutter: Int, gapLength: Float)\n\n  @JvmStatic\n  public external fun jni_YGNodeStyleSetGapPercentJNI(\n      nativePointer: Long,\n      gutter: Int,\n      gapLength: Float,\n  )\n\n  @JvmStatic\n  public external fun jni_YGNodeSetHasMeasureFuncJNI(nativePointer: Long, hasMeasureFunc: Boolean)\n\n  @JvmStatic\n  public external fun jni_YGNodeSetHasBaselineFuncJNI(nativePointer: Long, hasMeasureFunc: Boolean)\n\n  @JvmStatic\n  public external fun jni_YGNodeSetStyleInputsJNI(\n      nativePointer: Long,\n      styleInputsArray: FloatArray,\n      size: Int,\n  )\n\n  @JvmStatic public external fun jni_YGNodeCloneJNI(nativePointer: Long): Long\n\n  @JvmStatic\n  public external fun jni_YGNodeSetAlwaysFormsContainingBlockJNI(\n      nativePointer: Long,\n      alwaysFormContainingBlock: Boolean,\n  )\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNode.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic abstract class YogaNode : YogaProps {\n  /** The interface the [getData] object can optionally implement. */\n  public fun interface Inputs {\n    /** Requests the data object to disable mutations of its inputs. */\n    public fun freeze(node: YogaNode, parent: YogaNode?)\n  }\n\n  public abstract fun reset()\n\n  public abstract val childCount: Int\n\n  public abstract fun getChildAt(i: Int): YogaNode\n\n  public abstract fun addChildAt(child: YogaNode, i: Int)\n\n  abstract override fun setIsReferenceBaseline(isReferenceBaseline: Boolean)\n\n  public abstract val isReferenceBaseline: Boolean\n\n  public abstract fun removeChildAt(i: Int): YogaNode\n\n  /**\n   * @returns the [YogaNode] that owns this [YogaNode]. The owner is used to identify the YogaTree\n   *   that a [YogaNode] belongs to. This method will return the parent of the [YogaNode] when the\n   *   [YogaNode] only belongs to one YogaTree or null when the [YogaNode] is shared between two or\n   *   more YogaTrees.\n   */\n  public abstract fun getOwner(): YogaNode?\n\n  @Deprecated(\n      \"Use getOwner() instead. This will be removed in the next version. \",\n      replaceWith = ReplaceWith(\"getOwner()\"),\n  )\n  public abstract fun getParent(): YogaNode?\n\n  public abstract fun indexOf(child: YogaNode): Int\n\n  public abstract fun calculateLayout(width: Float, height: Float)\n\n  public abstract fun hasNewLayout(): Boolean\n\n  public abstract fun dirty()\n\n  public abstract fun isDirty(): Boolean\n\n  public abstract fun copyStyle(srcNode: YogaNode)\n\n  public abstract fun markLayoutSeen()\n\n  abstract override val styleDirection: YogaDirection\n\n  abstract override fun setDirection(direction: YogaDirection)\n\n  abstract override var flexDirection: YogaFlexDirection\n\n  abstract override var justifyContent: YogaJustify\n\n  abstract override var alignItems: YogaAlign\n\n  abstract override var alignSelf: YogaAlign\n\n  abstract override var alignContent: YogaAlign\n\n  abstract override var positionType: YogaPositionType\n\n  abstract override var boxSizing: YogaBoxSizing\n\n  abstract override var wrap: YogaWrap\n\n  public abstract var overflow: YogaOverflow?\n\n  public abstract var display: YogaDisplay?\n\n  abstract override var flex: Float\n\n  abstract override var flexGrow: Float\n\n  abstract override var flexShrink: Float\n\n  abstract override val flexBasis: YogaValue\n\n  abstract override fun setFlexBasis(flexBasis: Float)\n\n  abstract override fun setFlexBasisPercent(percent: Float)\n\n  abstract override fun setFlexBasisAuto()\n\n  abstract override fun setFlexBasisMaxContent()\n\n  abstract override fun setFlexBasisFitContent()\n\n  abstract override fun setFlexBasisStretch()\n\n  abstract override fun getMargin(edge: YogaEdge): YogaValue\n\n  abstract override fun setMargin(edge: YogaEdge, margin: Float)\n\n  abstract override fun setMarginPercent(edge: YogaEdge, percent: Float)\n\n  abstract override fun setMarginAuto(edge: YogaEdge)\n\n  abstract override fun getPadding(edge: YogaEdge): YogaValue\n\n  abstract override fun setPadding(edge: YogaEdge, padding: Float)\n\n  abstract override fun setPaddingPercent(edge: YogaEdge, percent: Float)\n\n  abstract override fun getBorder(edge: YogaEdge): Float\n\n  abstract override fun setBorder(edge: YogaEdge, value: Float)\n\n  abstract override fun getPosition(edge: YogaEdge): YogaValue\n\n  abstract override fun setPosition(edge: YogaEdge, position: Float)\n\n  abstract override fun setPositionPercent(edge: YogaEdge, percent: Float)\n\n  public abstract fun setPositionAuto(edge: YogaEdge)\n\n  abstract override val width: YogaValue\n\n  abstract override fun setWidth(width: Float)\n\n  abstract override fun setWidthPercent(percent: Float)\n\n  abstract override fun setWidthAuto()\n\n  abstract override fun setWidthMaxContent()\n\n  abstract override fun setWidthFitContent()\n\n  abstract override fun setWidthStretch()\n\n  abstract override val height: YogaValue\n\n  abstract override fun setHeight(height: Float)\n\n  abstract override fun setHeightPercent(percent: Float)\n\n  abstract override fun setHeightAuto()\n\n  abstract override fun setHeightMaxContent()\n\n  abstract override fun setHeightFitContent()\n\n  abstract override fun setHeightStretch()\n\n  abstract override val minWidth: YogaValue\n\n  abstract override fun setMinWidth(minWidth: Float)\n\n  abstract override fun setMinWidthPercent(percent: Float)\n\n  abstract override fun setMinWidthMaxContent()\n\n  abstract override fun setMinWidthFitContent()\n\n  abstract override fun setMinWidthStretch()\n\n  abstract override val minHeight: YogaValue\n\n  abstract override fun setMinHeight(minHeight: Float)\n\n  abstract override fun setMinHeightPercent(percent: Float)\n\n  abstract override fun setMinHeightMaxContent()\n\n  abstract override fun setMinHeightFitContent()\n\n  abstract override fun setMinHeightStretch()\n\n  abstract override val maxWidth: YogaValue\n\n  abstract override fun setMaxWidth(maxWidth: Float)\n\n  abstract override fun setMaxWidthPercent(percent: Float)\n\n  abstract override fun setMaxWidthMaxContent()\n\n  abstract override fun setMaxWidthFitContent()\n\n  abstract override fun setMaxWidthStretch()\n\n  abstract override val maxHeight: YogaValue\n\n  abstract override fun setMaxHeight(maxHeight: Float)\n\n  abstract override fun setMaxHeightPercent(percent: Float)\n\n  abstract override fun setMaxHeightMaxContent()\n\n  abstract override fun setMaxHeightFitContent()\n\n  abstract override fun setMaxHeightStretch()\n\n  abstract override var aspectRatio: Float\n\n  public abstract fun getGap(gutter: YogaGutter): YogaValue\n\n  public abstract fun setGap(gutter: YogaGutter, gapLength: Float)\n\n  public abstract fun setGapPercent(gutter: YogaGutter, gapLength: Float)\n\n  public abstract val layoutX: Float\n\n  public abstract val layoutY: Float\n\n  public abstract val layoutWidth: Float\n\n  public abstract val layoutHeight: Float\n\n  public abstract fun getLayoutMargin(edge: YogaEdge): Float\n\n  public abstract fun getLayoutPadding(edge: YogaEdge): Float\n\n  public abstract fun getLayoutBorder(edge: YogaEdge): Float\n\n  public abstract val layoutDirection: YogaDirection\n\n  abstract override fun setMeasureFunction(measureFunction: YogaMeasureFunction)\n\n  abstract override fun setBaselineFunction(yogaBaselineFunction: YogaBaselineFunction)\n\n  public abstract val isMeasureDefined: Boolean\n\n  public abstract val isBaselineDefined: Boolean\n\n  public abstract var data: Any?\n\n  public abstract fun cloneWithoutChildren(): YogaNode\n\n  public abstract fun cloneWithChildren(): YogaNode\n\n  public abstract fun setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: Boolean)\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNodeFactory.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic object YogaNodeFactory {\n  @JvmStatic public fun create(): YogaNode = YogaNodeJNIFinalizer()\n\n  @JvmStatic public fun create(config: YogaConfig): YogaNode = YogaNodeJNIFinalizer(config)\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNodeJNIBase.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport com.facebook.yoga.annotations.DoNotStrip;\nimport java.util.ArrayList;\nimport java.util.List;\nimport javax.annotation.Nullable;\n\n@DoNotStrip\npublic abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {\n\n  /* Those flags needs be in sync with YGJNI.h */\n  private static final byte MARGIN = 1;\n  private static final byte PADDING = 2;\n  private static final byte BORDER = 4;\n  private static final byte HAS_NEW_LAYOUT = 16;\n\n  private static final byte LAYOUT_EDGE_SET_FLAG_INDEX = 0;\n  private static final byte LAYOUT_WIDTH_INDEX = 1;\n  private static final byte LAYOUT_HEIGHT_INDEX = 2;\n  private static final byte LAYOUT_LEFT_INDEX = 3;\n  private static final byte LAYOUT_TOP_INDEX = 4;\n  private static final byte LAYOUT_DIRECTION_INDEX = 5;\n  private static final byte LAYOUT_MARGIN_START_INDEX = 6;\n  private static final byte LAYOUT_PADDING_START_INDEX = 10;\n  private static final byte LAYOUT_BORDER_START_INDEX = 14;\n\n  @Nullable private YogaNodeJNIBase mOwner;\n  @Nullable private YogaConfig mConfig;\n  @Nullable private List<YogaNodeJNIBase> mChildren;\n  @Nullable private YogaMeasureFunction mMeasureFunction;\n  @Nullable private YogaBaselineFunction mBaselineFunction;\n  protected long mNativePointer;\n  @Nullable private Object mData;\n\n  @DoNotStrip private @Nullable float[] arr = null;\n\n  @DoNotStrip private int mLayoutDirection = 0;\n\n  private boolean mHasNewLayout = true;\n\n  private YogaNodeJNIBase(long nativePointer) {\n    if (nativePointer == 0) {\n      throw new IllegalStateException(\"Failed to allocate native memory\");\n    }\n    mNativePointer = nativePointer;\n  }\n\n  YogaNodeJNIBase() {\n    this(YogaNative.jni_YGNodeNewJNI());\n  }\n\n  YogaNodeJNIBase(YogaConfig config) {\n    this(YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase) config).nativePointer));\n    mConfig = config; // makes sure the YogaConfig is not garbage collected\n  }\n\n  public void reset() {\n    mMeasureFunction = null;\n    mBaselineFunction = null;\n    mData = null;\n    arr = null;\n    mHasNewLayout = true;\n    mLayoutDirection = 0;\n\n    YogaNative.jni_YGNodeResetJNI(mNativePointer);\n  }\n\n  public int getChildCount() {\n    return mChildren == null ? 0 : mChildren.size();\n  }\n\n  public YogaNodeJNIBase getChildAt(int i) {\n    if (mChildren == null) {\n      throw new IllegalStateException(\"YogaNode does not have children\");\n    }\n    return mChildren.get(i);\n  }\n\n  public void addChildAt(YogaNode c, int i) {\n    if (!(c instanceof YogaNodeJNIBase)) {\n      return;\n    }\n    YogaNodeJNIBase child = (YogaNodeJNIBase) c;\n    if (child.mOwner != null) {\n      throw new IllegalStateException(\"Child already has a parent, it must be removed first.\");\n    }\n\n    if (mChildren == null) {\n      mChildren = new ArrayList<>(4);\n    }\n    mChildren.add(i, child);\n    child.mOwner = this;\n    YogaNative.jni_YGNodeInsertChildJNI(mNativePointer, child.mNativePointer, i);\n  }\n\n  public void setIsReferenceBaseline(boolean isReferenceBaseline) {\n    YogaNative.jni_YGNodeSetIsReferenceBaselineJNI(mNativePointer, isReferenceBaseline);\n  }\n\n  public boolean isReferenceBaseline() {\n    return YogaNative.jni_YGNodeIsReferenceBaselineJNI(mNativePointer);\n  }\n\n  public void swapChildAt(YogaNode newChild, int position) {\n    if (!(newChild instanceof YogaNodeJNIBase)) {\n      return;\n    }\n    YogaNodeJNIBase child = (YogaNodeJNIBase) newChild;\n    mChildren.remove(position);\n    mChildren.add(position, child);\n    child.mOwner = this;\n    YogaNative.jni_YGNodeSwapChildJNI(mNativePointer, child.mNativePointer, position);\n  }\n\n  @Override\n  public YogaNodeJNIBase cloneWithChildren() {\n    try {\n      YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone();\n      if (clonedYogaNode.mChildren != null) {\n        clonedYogaNode.mChildren = new ArrayList<>(clonedYogaNode.mChildren);\n      }\n      long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer);\n      clonedYogaNode.mOwner = null;\n      clonedYogaNode.mNativePointer = clonedNativePointer;\n      for (int i = 0; i < clonedYogaNode.getChildCount(); i++) {\n        clonedYogaNode.swapChildAt(clonedYogaNode.getChildAt(i).cloneWithChildren(), i);\n      }\n\n      return clonedYogaNode;\n    } catch (CloneNotSupportedException ex) {\n      // This class implements Cloneable, this should not happen\n      throw new RuntimeException(ex);\n    }\n  }\n\n  @Override\n  public YogaNodeJNIBase cloneWithoutChildren() {\n    try {\n      YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone();\n      long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer);\n      clonedYogaNode.mOwner = null;\n      clonedYogaNode.mNativePointer = clonedNativePointer;\n      clonedYogaNode.clearChildren();\n      return clonedYogaNode;\n    } catch (CloneNotSupportedException ex) {\n      // This class implements Cloneable, this should not happen\n      throw new RuntimeException(ex);\n    }\n  }\n\n  private void clearChildren() {\n    mChildren = null;\n    YogaNative.jni_YGNodeRemoveAllChildrenJNI(mNativePointer);\n  }\n\n  public YogaNodeJNIBase removeChildAt(int i) {\n    if (mChildren == null) {\n      throw new IllegalStateException(\n          \"Trying to remove a child of a YogaNode that does not have children\");\n    }\n    final YogaNodeJNIBase child = mChildren.remove(i);\n    child.mOwner = null;\n    YogaNative.jni_YGNodeRemoveChildJNI(mNativePointer, child.mNativePointer);\n    return child;\n  }\n\n  /**\n   * The owner is used to identify the YogaTree that a {@link YogaNode} belongs to. This method will\n   * return the parent of the {@link YogaNode} when the {@link YogaNode} only belongs to one\n   * YogaTree or null when the {@link YogaNode} is shared between two or more YogaTrees.\n   *\n   * @return the {@link YogaNode} that owns this {@link YogaNode}.\n   */\n  @Nullable\n  public YogaNodeJNIBase getOwner() {\n    return mOwner;\n  }\n\n  /** @deprecated Use #getOwner() instead. This will be removed in the next version. */\n  @Deprecated\n  @Nullable\n  public YogaNodeJNIBase getParent() {\n    return getOwner();\n  }\n\n  public int indexOf(YogaNode child) {\n    return mChildren == null ? -1 : mChildren.indexOf(child);\n  }\n\n  public void calculateLayout(float width, float height) {\n    long[] nativePointers = null;\n    YogaNodeJNIBase[] nodes = null;\n\n    freeze(null);\n\n    ArrayList<YogaNodeJNIBase> n = new ArrayList<>();\n    n.add(this);\n    for (int i = 0; i < n.size(); ++i) {\n      final YogaNodeJNIBase parent = n.get(i);\n      List<YogaNodeJNIBase> children = parent.mChildren;\n      if (children != null) {\n        for (YogaNodeJNIBase child : children) {\n          child.freeze(parent);\n          n.add(child);\n        }\n      }\n    }\n\n    nodes = n.toArray(new YogaNodeJNIBase[n.size()]);\n    nativePointers = new long[nodes.length];\n    for (int i = 0; i < nodes.length; ++i) {\n      nativePointers[i] = nodes[i].mNativePointer;\n    }\n\n    YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes);\n  }\n\n  private void freeze(YogaNode parent) {\n    Object data = getData();\n    if (data instanceof Inputs) {\n      ((Inputs) data).freeze(this, parent);\n    }\n  }\n\n  public void dirty() {\n    YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer);\n  }\n\n  public boolean isDirty() {\n    return YogaNative.jni_YGNodeIsDirtyJNI(mNativePointer);\n  }\n\n  @Override\n  public void copyStyle(YogaNode srcNode) {\n    if (!(srcNode instanceof YogaNodeJNIBase)) {\n      return;\n    }\n    YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer);\n  }\n\n  public YogaDirection getStyleDirection() {\n    return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirectionJNI(mNativePointer));\n  }\n\n  public void setDirection(YogaDirection direction) {\n    YogaNative.jni_YGNodeStyleSetDirectionJNI(mNativePointer, direction.intValue());\n  }\n\n  public YogaFlexDirection getFlexDirection() {\n    return YogaFlexDirection.fromInt(YogaNative.jni_YGNodeStyleGetFlexDirectionJNI(mNativePointer));\n  }\n\n  public void setFlexDirection(YogaFlexDirection flexDirection) {\n    YogaNative.jni_YGNodeStyleSetFlexDirectionJNI(mNativePointer, flexDirection.intValue());\n  }\n\n  public YogaJustify getJustifyContent() {\n    return YogaJustify.fromInt(YogaNative.jni_YGNodeStyleGetJustifyContentJNI(mNativePointer));\n  }\n\n  public void setJustifyContent(YogaJustify justifyContent) {\n    YogaNative.jni_YGNodeStyleSetJustifyContentJNI(mNativePointer, justifyContent.intValue());\n  }\n\n  public YogaAlign getAlignItems() {\n    return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignItemsJNI(mNativePointer));\n  }\n\n  public void setAlignItems(YogaAlign alignItems) {\n    YogaNative.jni_YGNodeStyleSetAlignItemsJNI(mNativePointer, alignItems.intValue());\n  }\n\n  public YogaAlign getAlignSelf() {\n    return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignSelfJNI(mNativePointer));\n  }\n\n  public void setAlignSelf(YogaAlign alignSelf) {\n    YogaNative.jni_YGNodeStyleSetAlignSelfJNI(mNativePointer, alignSelf.intValue());\n  }\n\n  public YogaAlign getAlignContent() {\n    return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignContentJNI(mNativePointer));\n  }\n\n  public void setAlignContent(YogaAlign alignContent) {\n    YogaNative.jni_YGNodeStyleSetAlignContentJNI(mNativePointer, alignContent.intValue());\n  }\n\n  public YogaPositionType getPositionType() {\n    return YogaPositionType.fromInt(YogaNative.jni_YGNodeStyleGetPositionTypeJNI(mNativePointer));\n  }\n\n  public void setPositionType(YogaPositionType positionType) {\n    YogaNative.jni_YGNodeStyleSetPositionTypeJNI(mNativePointer, positionType.intValue());\n  }\n\n  public YogaBoxSizing getBoxSizing() {\n    return YogaBoxSizing.fromInt(YogaNative.jni_YGNodeStyleGetBoxSizingJNI(mNativePointer));\n  }\n\n  public void setBoxSizing(YogaBoxSizing boxSizing) {\n    YogaNative.jni_YGNodeStyleSetBoxSizingJNI(mNativePointer, boxSizing.intValue());\n  }\n\n  public YogaWrap getWrap() {\n    return YogaWrap.fromInt(YogaNative.jni_YGNodeStyleGetFlexWrapJNI(mNativePointer));\n  }\n\n  public void setWrap(YogaWrap flexWrap) {\n    YogaNative.jni_YGNodeStyleSetFlexWrapJNI(mNativePointer, flexWrap.intValue());\n  }\n\n  public YogaOverflow getOverflow() {\n    return YogaOverflow.fromInt(YogaNative.jni_YGNodeStyleGetOverflowJNI(mNativePointer));\n  }\n\n  public void setOverflow(YogaOverflow overflow) {\n    YogaNative.jni_YGNodeStyleSetOverflowJNI(mNativePointer, overflow.intValue());\n  }\n\n  public YogaDisplay getDisplay() {\n    return YogaDisplay.fromInt(YogaNative.jni_YGNodeStyleGetDisplayJNI(mNativePointer));\n  }\n\n  public void setDisplay(YogaDisplay display) {\n    YogaNative.jni_YGNodeStyleSetDisplayJNI(mNativePointer, display.intValue());\n  }\n\n  public float getFlex() {\n    return YogaNative.jni_YGNodeStyleGetFlexJNI(mNativePointer);\n  }\n\n  public void setFlex(float flex) {\n    YogaNative.jni_YGNodeStyleSetFlexJNI(mNativePointer, flex);\n  }\n\n  public float getFlexGrow() {\n    return YogaNative.jni_YGNodeStyleGetFlexGrowJNI(mNativePointer);\n  }\n\n  public void setFlexGrow(float flexGrow) {\n    YogaNative.jni_YGNodeStyleSetFlexGrowJNI(mNativePointer, flexGrow);\n  }\n\n  public float getFlexShrink() {\n    return YogaNative.jni_YGNodeStyleGetFlexShrinkJNI(mNativePointer);\n  }\n\n  public void setFlexShrink(float flexShrink) {\n    YogaNative.jni_YGNodeStyleSetFlexShrinkJNI(mNativePointer, flexShrink);\n  }\n\n  public YogaValue getFlexBasis() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetFlexBasisJNI(mNativePointer));\n  }\n\n  public void setFlexBasis(float flexBasis) {\n    YogaNative.jni_YGNodeStyleSetFlexBasisJNI(mNativePointer, flexBasis);\n  }\n\n  public void setFlexBasisPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetFlexBasisPercentJNI(mNativePointer, percent);\n  }\n\n  public void setFlexBasisAuto() {\n    YogaNative.jni_YGNodeStyleSetFlexBasisAutoJNI(mNativePointer);\n  }\n\n  public void setFlexBasisMaxContent() {\n    YogaNative.jni_YGNodeStyleSetFlexBasisMaxContentJNI(mNativePointer);\n  }\n\n  public void setFlexBasisFitContent() {\n    YogaNative.jni_YGNodeStyleSetFlexBasisFitContentJNI(mNativePointer);\n  }\n\n  public void setFlexBasisStretch() {\n    YogaNative.jni_YGNodeStyleSetFlexBasisStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getMargin(YogaEdge edge) {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetMarginJNI(mNativePointer, edge.intValue()));\n  }\n\n  public void setMargin(YogaEdge edge, float margin) {\n    YogaNative.jni_YGNodeStyleSetMarginJNI(mNativePointer, edge.intValue(), margin);\n  }\n\n  public void setMarginPercent(YogaEdge edge, float percent) {\n    YogaNative.jni_YGNodeStyleSetMarginPercentJNI(mNativePointer, edge.intValue(), percent);\n  }\n\n  public void setMarginAuto(YogaEdge edge) {\n    YogaNative.jni_YGNodeStyleSetMarginAutoJNI(mNativePointer, edge.intValue());\n  }\n\n  public YogaValue getPadding(YogaEdge edge) {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetPaddingJNI(mNativePointer, edge.intValue()));\n  }\n\n  public void setPadding(YogaEdge edge, float padding) {\n    YogaNative.jni_YGNodeStyleSetPaddingJNI(mNativePointer, edge.intValue(), padding);\n  }\n\n  public void setPaddingPercent(YogaEdge edge, float percent) {\n    YogaNative.jni_YGNodeStyleSetPaddingPercentJNI(mNativePointer, edge.intValue(), percent);\n  }\n\n  public float getBorder(YogaEdge edge) {\n    return YogaNative.jni_YGNodeStyleGetBorderJNI(mNativePointer, edge.intValue());\n  }\n\n  public void setBorder(YogaEdge edge, float border) {\n    YogaNative.jni_YGNodeStyleSetBorderJNI(mNativePointer, edge.intValue(), border);\n  }\n\n  public YogaValue getPosition(YogaEdge edge) {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetPositionJNI(mNativePointer, edge.intValue()));\n  }\n\n  public void setPosition(YogaEdge edge, float position) {\n    YogaNative.jni_YGNodeStyleSetPositionJNI(mNativePointer, edge.intValue(), position);\n  }\n\n  public void setPositionPercent(YogaEdge edge, float percent) {\n    YogaNative.jni_YGNodeStyleSetPositionPercentJNI(mNativePointer, edge.intValue(), percent);\n  }\n\n  public void setPositionAuto(YogaEdge edge) {\n    YogaNative.jni_YGNodeStyleSetPositionAutoJNI(mNativePointer, edge.intValue());\n  }\n\n  public YogaValue getWidth() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetWidthJNI(mNativePointer));\n  }\n\n  public void setWidth(float width) {\n    YogaNative.jni_YGNodeStyleSetWidthJNI(mNativePointer, width);\n  }\n\n  public void setWidthPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetWidthPercentJNI(mNativePointer, percent);\n  }\n\n  public void setWidthAuto() {\n    YogaNative.jni_YGNodeStyleSetWidthAutoJNI(mNativePointer);\n  }\n\n  public void setWidthMaxContent() {\n    YogaNative.jni_YGNodeStyleSetWidthMaxContentJNI(mNativePointer);\n  }\n\n  public void setWidthFitContent() {\n    YogaNative.jni_YGNodeStyleSetWidthFitContentJNI(mNativePointer);\n  }\n\n  public void setWidthStretch() {\n    YogaNative.jni_YGNodeStyleSetWidthStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getHeight() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetHeightJNI(mNativePointer));\n  }\n\n  public void setHeight(float height) {\n    YogaNative.jni_YGNodeStyleSetHeightJNI(mNativePointer, height);\n  }\n\n  public void setHeightPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetHeightPercentJNI(mNativePointer, percent);\n  }\n\n  public void setHeightAuto() {\n    YogaNative.jni_YGNodeStyleSetHeightAutoJNI(mNativePointer);\n  }\n\n  public void setHeightMaxContent() {\n    YogaNative.jni_YGNodeStyleSetHeightMaxContentJNI(mNativePointer);\n  }\n\n  public void setHeightFitContent() {\n    YogaNative.jni_YGNodeStyleSetHeightFitContentJNI(mNativePointer);\n  }\n\n  public void setHeightStretch() {\n    YogaNative.jni_YGNodeStyleSetHeightStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getMinWidth() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetMinWidthJNI(mNativePointer));\n  }\n\n  public void setMinWidth(float minWidth) {\n    YogaNative.jni_YGNodeStyleSetMinWidthJNI(mNativePointer, minWidth);\n  }\n\n  public void setMinWidthPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetMinWidthPercentJNI(mNativePointer, percent);\n  }\n\n  public void setMinWidthMaxContent() {\n    YogaNative.jni_YGNodeStyleSetMinWidthMaxContentJNI(mNativePointer);\n  }\n\n  public void setMinWidthFitContent() {\n    YogaNative.jni_YGNodeStyleSetMinWidthFitContentJNI(mNativePointer);\n  }\n\n  public void setMinWidthStretch() {\n    YogaNative.jni_YGNodeStyleSetMinWidthStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getMinHeight() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetMinHeightJNI(mNativePointer));\n  }\n\n  public void setMinHeight(float minHeight) {\n    YogaNative.jni_YGNodeStyleSetMinHeightJNI(mNativePointer, minHeight);\n  }\n\n  public void setMinHeightPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetMinHeightPercentJNI(mNativePointer, percent);\n  }\n\n  public void setMinHeightMaxContent() {\n    YogaNative.jni_YGNodeStyleSetMinHeightMaxContentJNI(mNativePointer);\n  }\n\n  public void setMinHeightFitContent() {\n    YogaNative.jni_YGNodeStyleSetMinHeightFitContentJNI(mNativePointer);\n  }\n\n  public void setMinHeightStretch() {\n    YogaNative.jni_YGNodeStyleSetMinHeightStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getMaxWidth() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxWidthJNI(mNativePointer));\n  }\n\n  public void setMaxWidth(float maxWidth) {\n    YogaNative.jni_YGNodeStyleSetMaxWidthJNI(mNativePointer, maxWidth);\n  }\n\n  public void setMaxWidthPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetMaxWidthPercentJNI(mNativePointer, percent);\n  }\n\n  public void setMaxWidthMaxContent() {\n    YogaNative.jni_YGNodeStyleSetMaxWidthMaxContentJNI(mNativePointer);\n  }\n\n  public void setMaxWidthFitContent() {\n    YogaNative.jni_YGNodeStyleSetMaxWidthFitContentJNI(mNativePointer);\n  }\n\n  public void setMaxWidthStretch() {\n    YogaNative.jni_YGNodeStyleSetMaxWidthStretchJNI(mNativePointer);\n  }\n\n  public YogaValue getMaxHeight() {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxHeightJNI(mNativePointer));\n  }\n\n  public void setMaxHeight(float maxheight) {\n    YogaNative.jni_YGNodeStyleSetMaxHeightJNI(mNativePointer, maxheight);\n  }\n\n  public void setMaxHeightPercent(float percent) {\n    YogaNative.jni_YGNodeStyleSetMaxHeightPercentJNI(mNativePointer, percent);\n  }\n\n  public void setMaxHeightMaxContent() {\n    YogaNative.jni_YGNodeStyleSetMaxHeightMaxContentJNI(mNativePointer);\n  }\n\n  public void setMaxHeightFitContent() {\n    YogaNative.jni_YGNodeStyleSetMaxHeightFitContentJNI(mNativePointer);\n  }\n\n  public void setMaxHeightStretch() {\n    YogaNative.jni_YGNodeStyleSetMaxHeightStretchJNI(mNativePointer);\n  }\n\n  public float getAspectRatio() {\n    return YogaNative.jni_YGNodeStyleGetAspectRatioJNI(mNativePointer);\n  }\n\n  public void setAspectRatio(float aspectRatio) {\n    YogaNative.jni_YGNodeStyleSetAspectRatioJNI(mNativePointer, aspectRatio);\n  }\n\n  public void setMeasureFunction(YogaMeasureFunction measureFunction) {\n    mMeasureFunction = measureFunction;\n    YogaNative.jni_YGNodeSetHasMeasureFuncJNI(mNativePointer, measureFunction != null);\n  }\n\n  @Override\n  public void setAlwaysFormsContainingBlock(boolean alwaysFormsContainingBlock) {\n    YogaNative.jni_YGNodeSetAlwaysFormsContainingBlockJNI(mNativePointer, alwaysFormsContainingBlock);\n  }\n\n  // Implementation Note: Why this method needs to stay final\n  //\n  // We cache the jmethodid for this method in Yoga code. This means that even if a subclass\n  // were to override measure, we'd still call this implementation from layout code since the\n  // overriding method will have a different jmethodid. This is final to prevent that mistake.\n  @DoNotStrip\n  public final long measure(float width, int widthMode, float height, int heightMode) {\n    if (!isMeasureDefined()) {\n      throw new RuntimeException(\"Measure function isn't defined!\");\n    }\n\n    return mMeasureFunction.measure(\n        this,\n        width,\n        YogaMeasureMode.fromInt(widthMode),\n        height,\n        YogaMeasureMode.fromInt(heightMode));\n  }\n\n  public void setBaselineFunction(YogaBaselineFunction baselineFunction) {\n    mBaselineFunction = baselineFunction;\n    YogaNative.jni_YGNodeSetHasBaselineFuncJNI(mNativePointer, baselineFunction != null);\n  }\n\n  @DoNotStrip\n  public final float baseline(float width, float height) {\n    return mBaselineFunction.baseline(this, width, height);\n  }\n\n  public boolean isMeasureDefined() {\n    return mMeasureFunction != null;\n  }\n\n  @Override\n  public boolean isBaselineDefined() {\n    return mBaselineFunction != null;\n  }\n\n  public void setData(Object data) {\n    mData = data;\n  }\n\n  @Override\n  public @Nullable Object getData() {\n    return mData;\n  }\n\n  /**\n   * This method replaces the child at childIndex position with the newNode received by parameter.\n   * This is different than calling removeChildAt and addChildAt because this method ONLY replaces\n   * the child in the mChildren datastructure. @DoNotStrip: called from JNI\n   *\n   * @return the nativePointer of the newNode {@link YogaNode}\n   */\n  @DoNotStrip\n  private final long replaceChild(YogaNodeJNIBase newNode, int childIndex) {\n    if (mChildren == null) {\n      throw new IllegalStateException(\"Cannot replace child. YogaNode does not have children\");\n    }\n    mChildren.remove(childIndex);\n    mChildren.add(childIndex, newNode);\n    newNode.mOwner = this;\n    return newNode.mNativePointer;\n  }\n\n  private static YogaValue valueFromLong(long raw) {\n    return new YogaValue(Float.intBitsToFloat((int) raw), (int) (raw >> 32));\n  }\n\n  @Override\n  public float getLayoutX() {\n    return arr != null ? arr[LAYOUT_LEFT_INDEX] : 0;\n  }\n\n  @Override\n  public float getLayoutY() {\n    return arr != null ? arr[LAYOUT_TOP_INDEX] : 0;\n  }\n\n  @Override\n  public float getLayoutWidth() {\n    return arr != null ? arr[LAYOUT_WIDTH_INDEX] : 0;\n  }\n\n  @Override\n  public float getLayoutHeight() {\n    return arr != null ? arr[LAYOUT_HEIGHT_INDEX] : 0;\n  }\n\n  @Override\n  public float getLayoutMargin(YogaEdge edge) {\n    if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) {\n      switch (edge) {\n        case LEFT:\n          return arr[LAYOUT_MARGIN_START_INDEX];\n        case TOP:\n          return arr[LAYOUT_MARGIN_START_INDEX + 1];\n        case RIGHT:\n          return arr[LAYOUT_MARGIN_START_INDEX + 2];\n        case BOTTOM:\n          return arr[LAYOUT_MARGIN_START_INDEX + 3];\n        case START:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[LAYOUT_MARGIN_START_INDEX + 2]\n              : arr[LAYOUT_MARGIN_START_INDEX];\n        case END:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[LAYOUT_MARGIN_START_INDEX]\n              : arr[LAYOUT_MARGIN_START_INDEX + 2];\n        default:\n          throw new IllegalArgumentException(\"Cannot get layout margins of multi-edge shorthands\");\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  @Override\n  public float getLayoutPadding(YogaEdge edge) {\n    if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) {\n      int paddingStartIndex =\n          LAYOUT_PADDING_START_INDEX\n              - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4);\n      switch (edge) {\n        case LEFT:\n          return arr[paddingStartIndex];\n        case TOP:\n          return arr[paddingStartIndex + 1];\n        case RIGHT:\n          return arr[paddingStartIndex + 2];\n        case BOTTOM:\n          return arr[paddingStartIndex + 3];\n        case START:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[paddingStartIndex + 2]\n              : arr[paddingStartIndex];\n        case END:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[paddingStartIndex]\n              : arr[paddingStartIndex + 2];\n        default:\n          throw new IllegalArgumentException(\"Cannot get layout paddings of multi-edge shorthands\");\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  @Override\n  public float getLayoutBorder(YogaEdge edge) {\n    if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & BORDER) == BORDER) {\n      int borderStartIndex =\n          LAYOUT_BORDER_START_INDEX\n              - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4)\n              - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4);\n      switch (edge) {\n        case LEFT:\n          return arr[borderStartIndex];\n        case TOP:\n          return arr[borderStartIndex + 1];\n        case RIGHT:\n          return arr[borderStartIndex + 2];\n        case BOTTOM:\n          return arr[borderStartIndex + 3];\n        case START:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[borderStartIndex + 2]\n              : arr[borderStartIndex];\n        case END:\n          return getLayoutDirection() == YogaDirection.RTL\n              ? arr[borderStartIndex]\n              : arr[borderStartIndex + 2];\n        default:\n          throw new IllegalArgumentException(\"Cannot get layout border of multi-edge shorthands\");\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  @Override\n  public YogaDirection getLayoutDirection() {\n    return YogaDirection.fromInt(\n        arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection);\n  }\n\n  @Override\n  public boolean hasNewLayout() {\n    if (arr != null) {\n      return (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & HAS_NEW_LAYOUT) == HAS_NEW_LAYOUT;\n    } else {\n      return mHasNewLayout;\n    }\n  }\n\n  @Override\n  public void markLayoutSeen() {\n    if (arr != null) {\n      arr[LAYOUT_EDGE_SET_FLAG_INDEX] = ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & ~(HAS_NEW_LAYOUT);\n    }\n    mHasNewLayout = false;\n  }\n\n  @Override\n  public YogaValue getGap(YogaGutter gutter) {\n    return valueFromLong(YogaNative.jni_YGNodeStyleGetGapJNI(mNativePointer, gutter.intValue()));\n  }\n\n  @Override\n  public void setGap(YogaGutter gutter, float gapLength) {\n    YogaNative.jni_YGNodeStyleSetGapJNI(mNativePointer, gutter.intValue(), gapLength);\n  }\n\n  @Override\n  public void setGapPercent(YogaGutter gutter, float gapLength) {\n    YogaNative.jni_YGNodeStyleSetGapPercentJNI(mNativePointer, gutter.intValue(), gapLength);\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNodeJNIFinalizer.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic class YogaNodeJNIFinalizer : YogaNodeJNIBase {\n  public constructor() : super()\n\n  public constructor(config: YogaConfig) : super(config)\n\n  /*\n   * This is a valid use of finalize. No other mechanism is appropriate.\n   * YogaNodeJNIFinalizer exists specifically to release JNI-allocated native\n   * memory (via jni_YGNodeFinalizeJNI) when the Java object is garbage collected.\n   * This is the established pattern for JNI prevented leak classes in Yoga.\n   */\n  @Throws(Throwable::class)\n  protected fun finalize() {\n    freeNatives()\n  }\n\n  public fun freeNatives() {\n    if (mNativePointer != 0L) {\n      val nativePointer = mNativePointer\n      mNativePointer = 0\n      YogaNative.jni_YGNodeFinalizeJNI(nativePointer)\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaNodeType.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaNodeType {\n  DEFAULT(0),\n  TEXT(1);\n\n  private final int mIntValue;\n\n  YogaNodeType(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaNodeType fromInt(int value) {\n    switch (value) {\n      case 0: return DEFAULT;\n      case 1: return TEXT;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaOverflow.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaOverflow {\n  VISIBLE(0),\n  HIDDEN(1),\n  SCROLL(2);\n\n  private final int mIntValue;\n\n  YogaOverflow(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaOverflow fromInt(int value) {\n    switch (value) {\n      case 0: return VISIBLE;\n      case 1: return HIDDEN;\n      case 2: return SCROLL;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaPositionType.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaPositionType {\n  STATIC(0),\n  RELATIVE(1),\n  ABSOLUTE(2);\n\n  private final int mIntValue;\n\n  YogaPositionType(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaPositionType fromInt(int value) {\n    switch (value) {\n      case 0: return STATIC;\n      case 1: return RELATIVE;\n      case 2: return ABSOLUTE;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaProps.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic interface YogaProps {\n\n  /* Width properties */\n\n  public fun setWidth(width: Float)\n\n  public fun setWidthPercent(percent: Float)\n\n  public fun setWidthAuto()\n\n  public fun setWidthMaxContent()\n\n  public fun setWidthFitContent()\n\n  public fun setWidthStretch()\n\n  public fun setMinWidth(minWidth: Float)\n\n  public fun setMinWidthPercent(percent: Float)\n\n  public fun setMinWidthMaxContent()\n\n  public fun setMinWidthFitContent()\n\n  public fun setMinWidthStretch()\n\n  public fun setMaxWidth(maxWidth: Float)\n\n  public fun setMaxWidthPercent(percent: Float)\n\n  public fun setMaxWidthMaxContent()\n\n  public fun setMaxWidthFitContent()\n\n  public fun setMaxWidthStretch()\n\n  /* Height properties */\n\n  public fun setHeight(height: Float)\n\n  public fun setHeightPercent(percent: Float)\n\n  public fun setHeightAuto()\n\n  public fun setHeightMaxContent()\n\n  public fun setHeightFitContent()\n\n  public fun setHeightStretch()\n\n  public fun setMinHeight(minHeight: Float)\n\n  public fun setMinHeightPercent(percent: Float)\n\n  public fun setMinHeightMaxContent()\n\n  public fun setMinHeightFitContent()\n\n  public fun setMinHeightStretch()\n\n  public fun setMaxHeight(maxHeight: Float)\n\n  public fun setMaxHeightPercent(percent: Float)\n\n  public fun setMaxHeightMaxContent()\n\n  public fun setMaxHeightFitContent()\n\n  public fun setMaxHeightStretch()\n\n  /* Margin properties */\n\n  public fun setMargin(edge: YogaEdge, margin: Float)\n\n  public fun setMarginPercent(edge: YogaEdge, percent: Float)\n\n  public fun setMarginAuto(edge: YogaEdge)\n\n  /* Padding properties */\n\n  public fun setPadding(edge: YogaEdge, padding: Float)\n\n  public fun setPaddingPercent(edge: YogaEdge, percent: Float)\n\n  /* Position properties */\n\n  public fun setPosition(edge: YogaEdge, position: Float)\n\n  public fun setPositionPercent(edge: YogaEdge, percent: Float)\n\n  /* Border properties */\n\n  public fun setBorder(edge: YogaEdge, value: Float)\n\n  /* Flex basis properties */\n\n  public fun setFlexBasisAuto()\n\n  public fun setFlexBasisPercent(percent: Float)\n\n  public fun setFlexBasis(flexBasis: Float)\n\n  public fun setFlexBasisMaxContent()\n\n  public fun setFlexBasisFitContent()\n\n  public fun setFlexBasisStretch()\n\n  /* Direction property - setter has different name than getter */\n\n  public fun setDirection(direction: YogaDirection)\n\n  /* Other functions */\n\n  public fun setIsReferenceBaseline(isReferenceBaseline: Boolean)\n\n  public fun setMeasureFunction(measureFunction: YogaMeasureFunction)\n\n  public fun setBaselineFunction(yogaBaselineFunction: YogaBaselineFunction)\n\n  /* Mutable properties - getter and setter with matching types */\n\n  public var flexDirection: YogaFlexDirection\n\n  public var justifyContent: YogaJustify\n\n  public var alignItems: YogaAlign\n\n  public var alignSelf: YogaAlign\n\n  public var alignContent: YogaAlign\n\n  public var positionType: YogaPositionType\n\n  public var flexGrow: Float\n\n  public var flexShrink: Float\n\n  public var flex: Float\n\n  public var aspectRatio: Float\n\n  public var wrap: YogaWrap\n\n  public var boxSizing: YogaBoxSizing\n\n  /* Read-only properties - getter only, or setter has different type/name */\n\n  public val styleDirection: YogaDirection\n\n  public val width: YogaValue\n\n  public val minWidth: YogaValue\n\n  public val maxWidth: YogaValue\n\n  public val height: YogaValue\n\n  public val minHeight: YogaValue\n\n  public val maxHeight: YogaValue\n\n  public val flexBasis: YogaValue\n\n  /* Functions with parameters */\n\n  public fun getMargin(edge: YogaEdge): YogaValue\n\n  public fun getPadding(edge: YogaEdge): YogaValue\n\n  public fun getPosition(edge: YogaEdge): YogaValue\n\n  public fun getBorder(edge: YogaEdge): Float\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaStyleInputs.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic object YogaStyleInputs {\n  public const val LAYOUT_DIRECTION: Short = 0\n  public const val FLEX_DIRECTION: Short = 1\n  public const val FLEX: Short = 2\n  public const val FLEX_GROW: Short = 3\n  public const val FLEX_SHRINK: Short = 4\n  public const val FLEX_BASIS: Short = 5\n  public const val FLEX_BASIS_PERCENT: Short = 6\n  public const val FLEX_BASIS_AUTO: Short = 7\n  public const val FLEX_WRAP: Short = 8\n  public const val WIDTH: Short = 9\n  public const val WIDTH_PERCENT: Short = 10\n  public const val WIDTH_AUTO: Short = 11\n  public const val MIN_WIDTH: Short = 12\n  public const val MIN_WIDTH_PERCENT: Short = 13\n  public const val MAX_WIDTH: Short = 14\n  public const val MAX_WIDTH_PERCENT: Short = 15\n  public const val HEIGHT: Short = 16\n  public const val HEIGHT_PERCENT: Short = 17\n  public const val HEIGHT_AUTO: Short = 18\n  public const val MIN_HEIGHT: Short = 19\n  public const val MIN_HEIGHT_PERCENT: Short = 20\n  public const val MAX_HEIGHT: Short = 21\n  public const val MAX_HEIGHT_PERCENT: Short = 22\n  public const val JUSTIFY_CONTENT: Short = 23\n  public const val ALIGN_ITEMS: Short = 24\n  public const val ALIGN_SELF: Short = 25\n  public const val ALIGN_CONTENT: Short = 26\n  public const val POSITION_TYPE: Short = 27\n  public const val ASPECT_RATIO: Short = 28\n  public const val OVERFLOW: Short = 29\n  public const val DISPLAY: Short = 30\n  public const val MARGIN: Short = 31\n  public const val MARGIN_PERCENT: Short = 32\n  public const val MARGIN_AUTO: Short = 33\n  public const val PADDING: Short = 34\n  public const val PADDING_PERCENT: Short = 35\n  public const val BORDER: Short = 36\n  public const val POSITION: Short = 37\n  public const val POSITION_PERCENT: Short = 38\n  public const val IS_REFERENCE_BASELINE: Short = 39\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaUnit.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaUnit {\n  UNDEFINED(0),\n  POINT(1),\n  PERCENT(2),\n  AUTO(3),\n  MAX_CONTENT(4),\n  FIT_CONTENT(5),\n  STRETCH(6);\n\n  private final int mIntValue;\n\n  YogaUnit(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaUnit fromInt(int value) {\n    switch (value) {\n      case 0: return UNDEFINED;\n      case 1: return POINT;\n      case 2: return PERCENT;\n      case 3: return AUTO;\n      case 4: return MAX_CONTENT;\n      case 5: return FIT_CONTENT;\n      case 6: return STRETCH;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaValue.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga\n\npublic class YogaValue\npublic constructor(@JvmField public val value: Float, @JvmField public val unit: YogaUnit) {\n  internal constructor(value: Float, unit: Int) : this(value, YogaUnit.fromInt(unit))\n\n  override fun equals(other: Any?): Boolean {\n    if (other is YogaValue) {\n      val otherValue = other\n      if (unit == otherValue.unit) {\n        return unit == YogaUnit.UNDEFINED ||\n            unit == YogaUnit.AUTO ||\n            value.compareTo(otherValue.value) == 0\n      }\n    }\n    return false\n  }\n\n  override fun hashCode(): Int = java.lang.Float.floatToIntBits(value) + unit.intValue()\n\n  override fun toString(): String =\n      when (unit) {\n        YogaUnit.UNDEFINED -> \"undefined\"\n        YogaUnit.POINT -> value.toString()\n        YogaUnit.PERCENT -> \"$value%\"\n        YogaUnit.AUTO -> \"auto\"\n        else -> throw IllegalStateException()\n      }\n\n  public companion object {\n    @JvmField\n    public val UNDEFINED: YogaValue = YogaValue(YogaConstants.UNDEFINED, YogaUnit.UNDEFINED)\n\n    @JvmField public val ZERO: YogaValue = YogaValue(0f, YogaUnit.POINT)\n\n    @JvmField public val AUTO: YogaValue = YogaValue(YogaConstants.UNDEFINED, YogaUnit.AUTO)\n\n    @JvmStatic\n    public fun parse(s: String?): YogaValue? {\n      if (s == null) {\n        return null\n      }\n\n      if (\"undefined\" == s) {\n        return UNDEFINED\n      }\n\n      if (\"auto\" == s) {\n        return AUTO\n      }\n\n      if (s.endsWith(\"%\")) {\n        return YogaValue(s.substring(0, s.length - 1).toFloat(), YogaUnit.PERCENT)\n      }\n\n      return YogaValue(s.toFloat(), YogaUnit.POINT)\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/YogaWrap.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\npackage com.facebook.yoga;\n\npublic enum YogaWrap {\n  NO_WRAP(0),\n  WRAP(1),\n  WRAP_REVERSE(2);\n\n  private final int mIntValue;\n\n  YogaWrap(int intValue) {\n    mIntValue = intValue;\n  }\n\n  public int intValue() {\n    return mIntValue;\n  }\n\n  public static YogaWrap fromInt(int value) {\n    switch (value) {\n      case 0: return NO_WRAP;\n      case 1: return WRAP;\n      case 2: return WRAP_REVERSE;\n      default: throw new IllegalArgumentException(\"Unknown enum value: \" + value);\n    }\n  }\n}\n"
  },
  {
    "path": "java/com/facebook/yoga/annotations/DoNotStrip.kt",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga.annotations\n\n@Target(\n    AnnotationTarget.CLASS,\n    AnnotationTarget.FIELD,\n    AnnotationTarget.FUNCTION,\n    AnnotationTarget.PROPERTY_GETTER,\n    AnnotationTarget.PROPERTY_SETTER,\n    AnnotationTarget.CONSTRUCTOR,\n)\n@Retention(AnnotationRetention.BINARY)\npublic annotation class DoNotStrip\n"
  },
  {
    "path": "java/gen/com/facebook/yoga/BuildConfig.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*___Generated_by_IDEA___*/\n\npackage com.facebook.yoga;\n\n/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */\npublic final class BuildConfig {\n  public final static boolean DEBUG = Boolean.parseBoolean(null);\n}"
  },
  {
    "path": "java/jni/LayoutContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <stack>\n\n#include \"LayoutContext.h\"\n\nnamespace facebook::yoga::vanillajni {\n\nnamespace {\nstd::stack<PtrJNodeMapVanilla*>& getContexts() {\n  static thread_local std::stack<PtrJNodeMapVanilla*> contexts;\n  return contexts;\n}\n\n} // namespace\n\nLayoutContext::Provider::Provider(PtrJNodeMapVanilla* data) {\n  getContexts().push(data);\n}\n\nLayoutContext::Provider::~Provider() {\n  getContexts().pop();\n}\n\n/*static*/ PtrJNodeMapVanilla* LayoutContext::getNodeMap() {\n  return getContexts().empty() ? nullptr : getContexts().top();\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/LayoutContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n#include \"YGJTypesVanilla.h\"\n\nnamespace facebook::yoga::vanillajni {\n\n// TODO: This should not be exported or used outside of the JNI bindings\nclass YG_EXPORT LayoutContext {\n public:\n  // Sets a context on the current thread for the duration of the Provider's\n  // lifetime. This context should be set during the layout process to allow\n  // layout callbacks to access context-data specific to the layout pass.\n  struct Provider {\n    explicit Provider(PtrJNodeMapVanilla* data);\n    ~Provider();\n  };\n\n  static PtrJNodeMapVanilla* getNodeMap();\n};\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/ScopedGlobalRef.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <jni.h>\n#include <cstddef>\n#include <type_traits>\n#include \"corefunctions.h\"\n\nnamespace facebook::yoga::vanillajni {\n\n/**\n * ScopedGlobalRef is a sort of smart reference that allows us to control the\n * lifespan of a JNI global reference.\n *\n * This class is designed so that when a ScopedGlobalRef goes out of scoped, its\n * destructor will delete -JNIEnv->DeleteGlobalRef()- the underlying JNI\n * reference.\n *\n * This class should be used to wrap all the global references we create during\n * normal JNI operations if we want reference to eventually go away (in JNI it\n * is a common operation to cache some global references throughout the lifespan\n * of a process, in which case using this class does not really make sense). The\n * idea behind this is that in JNI we should be very explicit about the lifespan\n * of global references. Global references can quickly get out of control if not\n * freed properly, and the developer should always be very aware of the lifespan\n * of each global reference that is created in JNI so that leaks are prevented.\n *\n * This class is very explicit in its behavior, and it does not allow to perform\n * unexpected conversions or unexpected ownership transfer. In practice, this\n * class acts as a unique pointer where the underlying JNI reference can have\n * one and just one owner. Transferring ownership is allowed but it is an\n * explicit operation (implemented via move semantics and also via explicitly\n * API calls).\n *\n * Note that this class doesn't receive an explicit JNIEnv at construction time.\n * At destruction time it uses vanillajni::getCurrentEnv() to retrieve the\n * JNIEnv.\n *\n * It is OK to cache a ScopedGlobalRef between different JNI native\n * method calls.\n */\ntemplate <typename T>\nclass ScopedGlobalRef {\n  static_assert(\n      std::is_same<T, jclass>() || std::is_same<T, jobject>() ||\n          std::is_same<T, jstring>() || std::is_same<T, jthrowable>() ||\n          std::is_same<T, jbyteArray>() || std::is_same<T, jintArray>() ||\n          std::is_same<T, jshortArray>() || std::is_same<T, jcharArray>() ||\n          std::is_same<T, jlongArray>() || std::is_same<T, jfloatArray>() ||\n          std::is_same<T, jdoubleArray>() || std::is_same<T, jobjectArray>() ||\n          std::is_same<T, jbooleanArray>(),\n      \"ScopedGlobalRef instantiated for invalid type\");\n\n public:\n  /**\n   * Constructs a ScopedGlobalRef with a JNI global reference.\n   *\n   * @param globalRef the global reference to wrap. Can be NULL.\n   */\n  explicit ScopedGlobalRef(T globalRef) : mGlobalRef(globalRef) {}\n\n  /**\n   * Equivalent to ScopedGlobalRef(NULL)\n   */\n  explicit ScopedGlobalRef() : mGlobalRef(NULL) {}\n\n  /**\n   * Move construction is allowed.\n   */\n  ScopedGlobalRef(ScopedGlobalRef&& s) noexcept : mGlobalRef(s.release()) {}\n\n  /**\n   * Move assignment is allowed.\n   */\n  ScopedGlobalRef& operator=(ScopedGlobalRef&& s) noexcept {\n    reset(s.release());\n    return *this;\n  }\n\n  ~ScopedGlobalRef() {\n    reset();\n  }\n\n  /**\n   * Deletes the currently held reference and reassigns a new one to the\n   * ScopedGlobalRef.\n   */\n  void reset(T ptr = NULL) {\n    if (ptr != mGlobalRef) {\n      if (mGlobalRef != NULL) {\n        vanillajni::getCurrentEnv()->DeleteGlobalRef(mGlobalRef);\n      }\n      mGlobalRef = ptr;\n    }\n  }\n\n  /**\n   * Makes this ScopedGlobalRef not own the underlying JNI global reference.\n   * After calling this method, the ScopedGlobalRef will not delete the JNI\n   * global reference when the ScopedGlobalRef goes out of scope.\n   */\n  T release() {\n    T globalRef = mGlobalRef;\n    mGlobalRef = NULL;\n    return globalRef;\n  }\n\n  /**\n   * Returns the underlying JNI global reference.\n   */\n  T get() const {\n    return mGlobalRef;\n  }\n\n  /**\n   * Returns true if the underlying JNI reference is not NULL.\n   */\n  operator bool() const {\n    return mGlobalRef != NULL;\n  }\n\n  ScopedGlobalRef(const ScopedGlobalRef& ref) = delete;\n  ScopedGlobalRef& operator=(const ScopedGlobalRef& other) = delete;\n\n private:\n  T mGlobalRef;\n};\n\ntemplate <typename T>\nScopedGlobalRef<T> make_global_ref(T globalRef) {\n  return ScopedGlobalRef<T>(globalRef);\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/ScopedLocalRef.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * This is a modified version of Android's ScopedLocalRef class that can be\n * found in the Android's JNI code.\n */\n#pragma once\n\n#include <jni.h>\n#include <cstddef>\n#include <type_traits>\n\nnamespace facebook::yoga::vanillajni {\n\n/**\n * ScopedLocalRef is a sort of smart reference that allows us to control the\n * lifespan of a JNI local reference.\n *\n * This class is designed so that when a ScopedLocalRef goes out of scope, its\n * destructor will delete -JNIEnv->DeleteLocalRef()- the underlying JNI\n * reference.\n *\n * This class should be used to wrap all the local references that JNI\n * gives us other than those that are passed to native methods at\n * invocation time. The idea behind this is that in JNI we should be very\n * explicit about the lifespan of local references. Local references can quickly\n * get out of control, and the developer should always be very aware of the\n * lifespan of each local reference that is created in JNI so that leaks are\n * prevented.\n *\n * This class is very explicit in its behavior, and it does not allow to perform\n * unexpected conversions or unexpected ownership transfer. In practice, this\n * class acts as a unique pointer where the underlying JNI reference can have\n * one and just one owner. Transferring ownership is allowed but it is an\n * explicit operation (implemented via move semantics and also via explicitly\n * API calls).\n *\n * As with standard JNI local references it is not a valid operation to keep a\n * reference around between different native method calls.\n */\ntemplate <typename T>\nclass ScopedLocalRef {\n  static_assert(\n      std::is_same<T, jclass>() || std::is_same<T, jobject>() ||\n          std::is_same<T, jstring>() || std::is_same<T, jthrowable>() ||\n          std::is_same<T, jbyteArray>() || std::is_same<T, jintArray>() ||\n          std::is_same<T, jshortArray>() || std::is_same<T, jcharArray>() ||\n          std::is_same<T, jlongArray>() || std::is_same<T, jfloatArray>() ||\n          std::is_same<T, jdoubleArray>() || std::is_same<T, jobjectArray>() ||\n          std::is_same<T, jbooleanArray>(),\n      \"ScopedLocalRef instantiated for invalid type\");\n\n public:\n  /**\n   * Constructs a ScopedLocalRef with a JNI local reference.\n   *\n   * @param localRef the local reference to wrap. Can be NULL.\n   */\n  ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) {}\n\n  /**\n   * Equivalent to ScopedLocalRef(env, NULL)\n   */\n  explicit ScopedLocalRef(JNIEnv* env) : mEnv(env), mLocalRef(NULL) {}\n\n  /**\n   * Move construction is allowed.\n   */\n  ScopedLocalRef(ScopedLocalRef&& s) noexcept\n      : mEnv(s.mEnv), mLocalRef(s.release()) {}\n\n  /**\n   * Move assignment is allowed.\n   */\n  ScopedLocalRef& operator=(ScopedLocalRef&& s) noexcept {\n    reset(s.release());\n    mEnv = s.mEnv;\n    return *this;\n  }\n\n  ~ScopedLocalRef() {\n    reset();\n  }\n\n  /**\n   * Deletes the currently held reference and reassigns a new one to the\n   * ScopedLocalRef.\n   */\n  void reset(T ptr = NULL) {\n    if (ptr != mLocalRef) {\n      if (mLocalRef != NULL) {\n        mEnv->DeleteLocalRef(mLocalRef);\n      }\n      mLocalRef = ptr;\n    }\n  }\n\n  /**\n   * Makes this ScopedLocalRef not own the underlying JNI local reference. After\n   * calling this method, the ScopedLocalRef will not delete the JNI local\n   * reference when the ScopedLocalRef goes out of scope.\n   */\n  T release() {\n    T localRef = mLocalRef;\n    mLocalRef = NULL;\n    return localRef;\n  }\n\n  /**\n   * Returns the underlying JNI local reference.\n   */\n  T get() const {\n    return mLocalRef;\n  }\n\n  /**\n   * Returns true if the underlying JNI reference is not NULL.\n   */\n  operator bool() const {\n    return mLocalRef != NULL;\n  }\n\n  ScopedLocalRef(const ScopedLocalRef& ref) = delete;\n  ScopedLocalRef& operator=(const ScopedLocalRef& other) = delete;\n\n private:\n  JNIEnv* mEnv;\n  T mLocalRef;\n};\n\ntemplate <typename T>\nScopedLocalRef<T> make_local_ref(JNIEnv* env, T localRef) {\n  return ScopedLocalRef<T>(env, localRef);\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/YGJNI.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\nconst short int LAYOUT_EDGE_SET_FLAG_INDEX = 0;\nconst short int LAYOUT_WIDTH_INDEX = 1;\nconst short int LAYOUT_HEIGHT_INDEX = 2;\nconst short int LAYOUT_LEFT_INDEX = 3;\nconst short int LAYOUT_TOP_INDEX = 4;\nconst short int LAYOUT_DIRECTION_INDEX = 5;\nconst short int LAYOUT_MARGIN_START_INDEX = 6;\nconst short int LAYOUT_PADDING_START_INDEX = 10;\nconst short int LAYOUT_BORDER_START_INDEX = 14;\n\nnamespace {\n\nconst int HAS_NEW_LAYOUT = 16;\n\nunion YGNodeContext {\n  int32_t edgesSet = 0;\n  void* asVoidPtr;\n};\n\nclass YGNodeEdges {\n  int32_t edges_;\n\n public:\n  enum Edge {\n    MARGIN = 1,\n    PADDING = 2,\n    BORDER = 4,\n  };\n\n  explicit YGNodeEdges(YGNodeRef node) {\n    auto context = YGNodeContext{};\n    context.asVoidPtr = YGNodeGetContext(node);\n    edges_ = context.edgesSet;\n  }\n\n  void setOn(YGNodeRef node) {\n    auto context = YGNodeContext{};\n    context.edgesSet = edges_;\n    YGNodeSetContext(node, context.asVoidPtr);\n  }\n\n  bool has(Edge edge) {\n    return (edges_ & edge) == edge;\n  }\n\n  YGNodeEdges& add(Edge edge) {\n    edges_ |= edge;\n    return *this;\n  }\n\n  int get() {\n    return edges_;\n  }\n};\n\nstruct YogaValue {\n  static constexpr jint NAN_BYTES = 0x7fc00000;\n\n  static jlong asJavaLong(const YGValue& value) {\n    uint32_t valueBytes = 0;\n    memcpy(&valueBytes, &value.value, sizeof valueBytes);\n    return ((jlong)value.unit) << 32 | valueBytes;\n  }\n  constexpr static jlong undefinedAsJavaLong() {\n    return ((jlong)YGUnitUndefined) << 32 | NAN_BYTES;\n  }\n};\n} // namespace\n"
  },
  {
    "path": "java/jni/YGJNIVanilla.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"YGJNIVanilla.h\"\n#include <bit>\n#include <cstring>\n#include <iostream>\n#include <memory>\n#include \"LayoutContext.h\"\n#include \"YGJNI.h\"\n#include \"YGJTypesVanilla.h\"\n#include \"YogaJniException.h\"\n#include \"common.h\"\n#include \"jni.h\"\n\nusing namespace facebook;\nusing namespace facebook::yoga;\nusing namespace facebook::yoga::vanillajni;\n\nstatic inline ScopedLocalRef<jobject> YGNodeJobject(YGNodeConstRef node) {\n  return LayoutContext::getNodeMap()->ref(node);\n}\n\nstatic inline YGNodeRef _jlong2YGNodeRef(jlong addr) {\n  return reinterpret_cast<YGNodeRef>(static_cast<intptr_t>(addr));\n}\n\nstatic inline YGConfigRef _jlong2YGConfigRef(jlong addr) {\n  return reinterpret_cast<YGConfigRef>(static_cast<intptr_t>(addr));\n}\n\nstatic jlong jni_YGConfigNewJNI(JNIEnv* /*env*/, jobject /*obj*/) {\n  return reinterpret_cast<jlong>(YGConfigNew());\n}\n\nstatic void\njni_YGConfigFreeJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  // unique_ptr will destruct the underlying global_ref, if present.\n  auto context = std::unique_ptr<ScopedGlobalRef<jobject>>{\n      static_cast<ScopedGlobalRef<jobject>*>(YGConfigGetContext(config))};\n  YGConfigFree(config);\n}\n\nstatic void jni_YGConfigSetExperimentalFeatureEnabledJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint feature,\n    jboolean enabled) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  YGConfigSetExperimentalFeatureEnabled(\n      config,\n      static_cast<YGExperimentalFeature>(feature),\n      static_cast<bool>(enabled));\n}\n\nstatic void jni_YGConfigSetUseWebDefaultsJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jboolean useWebDefaults) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  YGConfigSetUseWebDefaults(config, static_cast<bool>(useWebDefaults));\n}\n\nstatic void jni_YGConfigSetPointScaleFactorJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jfloat pixelsInPoint) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  YGConfigSetPointScaleFactor(config, pixelsInPoint);\n}\n\nstatic void jni_YGConfigSetErrataJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint errata) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  YGConfigSetErrata(config, static_cast<YGErrata>(errata));\n}\n\nstatic jint jni_YGConfigGetErrataJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  return static_cast<jint>(YGConfigGetErrata(config));\n}\n\nstatic jlong jni_YGNodeNewJNI(JNIEnv* /*env*/, jobject /*obj*/) {\n  const YGNodeRef node = YGNodeNew();\n  YGNodeSetContext(node, YGNodeContext{}.asVoidPtr);\n  return reinterpret_cast<jlong>(node);\n}\n\nstatic jlong jni_YGNodeNewWithConfigJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong configPointer) {\n  const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer));\n  YGNodeSetContext(node, YGNodeContext{}.asVoidPtr);\n  return reinterpret_cast<jlong>(node);\n}\n\nstatic int YGJNILogFunc(\n    const YGConfigConstRef config,\n    const YGNodeConstRef /*node*/,\n    YGLogLevel level,\n    const char* format,\n    va_list args) {\n  va_list argsCopy;\n  va_copy(argsCopy, args);\n  int result = vsnprintf(nullptr, 0, format, argsCopy);\n  std::vector<char> buffer(1 + static_cast<size_t>(result));\n  vsnprintf(buffer.data(), buffer.size(), format, args);\n\n  auto jloggerPtr =\n      static_cast<ScopedGlobalRef<jobject>*>(YGConfigGetContext(config));\n  if (jloggerPtr != nullptr) {\n    if (*jloggerPtr) {\n      JNIEnv* env = getCurrentEnv();\n\n      jclass cl = env->FindClass(\"com/facebook/yoga/YogaLogLevel\");\n      static const jmethodID smethodId =\n          facebook::yoga::vanillajni::getStaticMethodId(\n              env, cl, \"fromInt\", \"(I)Lcom/facebook/yoga/YogaLogLevel;\");\n      ScopedLocalRef<jobject> logLevel =\n          facebook::yoga::vanillajni::callStaticObjectMethod(\n              env, cl, smethodId, level);\n\n      auto objectClass = facebook::yoga::vanillajni::make_local_ref(\n          env, env->GetObjectClass((*jloggerPtr).get()));\n      static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(\n          env,\n          objectClass.get(),\n          \"log\",\n          \"(Lcom/facebook/yoga/YogaLogLevel;Ljava/lang/String;)V\");\n      facebook::yoga::vanillajni::callVoidMethod(\n          env,\n          (*jloggerPtr).get(),\n          methodId,\n          logLevel.get(),\n          env->NewStringUTF(buffer.data()));\n    }\n  }\n\n  return result;\n}\n\nstatic void jni_YGConfigSetLoggerJNI(\n    JNIEnv* env,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jobject logger) {\n  const YGConfigRef config = _jlong2YGConfigRef(nativePointer);\n  auto context =\n      reinterpret_cast<ScopedGlobalRef<jobject>*>(YGConfigGetContext(config));\n\n  if (logger != nullptr) {\n    if (context == nullptr) {\n      context = new ScopedGlobalRef<jobject>();\n      YGConfigSetContext(config, context);\n    }\n\n    *context = newGlobalRef(env, logger);\n    YGConfigSetLogger(config, YGJNILogFunc);\n  } else {\n    if (context != nullptr) {\n      delete context;\n      YGConfigSetContext(config, nullptr);\n    }\n    YGConfigSetLogger(config, nullptr);\n  }\n}\n\nstatic void\njni_YGNodeFinalizeJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  if (nativePointer == 0) {\n    return;\n  }\n  const YGNodeRef node = _jlong2YGNodeRef(nativePointer);\n  YGNodeFinalize(node);\n}\n\nstatic void\njni_YGNodeResetJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  const YGNodeRef node = _jlong2YGNodeRef(nativePointer);\n  void* context = YGNodeGetContext(node);\n  YGNodeReset(node);\n  YGNodeSetContext(node, context);\n}\n\nstatic void jni_YGNodeInsertChildJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jlong childPointer,\n    jint index) {\n  YGNodeInsertChild(\n      _jlong2YGNodeRef(nativePointer),\n      _jlong2YGNodeRef(childPointer),\n      static_cast<uint32_t>(index));\n}\n\nstatic void jni_YGNodeSwapChildJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jlong childPointer,\n    jint index) {\n  YGNodeSwapChild(\n      _jlong2YGNodeRef(nativePointer),\n      _jlong2YGNodeRef(childPointer),\n      static_cast<uint32_t>(index));\n}\n\nstatic void jni_YGNodeSetIsReferenceBaselineJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jboolean isReferenceBaseline) {\n  YGNodeSetIsReferenceBaseline(\n      _jlong2YGNodeRef(nativePointer), static_cast<bool>(isReferenceBaseline));\n}\n\nstatic jboolean jni_YGNodeIsReferenceBaselineJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer) {\n  return static_cast<jboolean>(\n      YGNodeIsReferenceBaseline(_jlong2YGNodeRef(nativePointer)));\n}\n\nstatic void jni_YGNodeRemoveAllChildrenJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer) {\n  const YGNodeRef node = _jlong2YGNodeRef(nativePointer);\n  YGNodeRemoveAllChildren(node);\n}\n\nstatic void jni_YGNodeRemoveChildJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jlong childPointer) {\n  YGNodeRemoveChild(\n      _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer));\n}\n\nstatic void\nYGTransferLayoutOutputsRecursive(JNIEnv* env, jobject thiz, YGNodeRef root) {\n  if (!YGNodeGetHasNewLayout(root)) {\n    return;\n  }\n  auto obj = YGNodeJobject(root);\n  if (!obj) {\n    return;\n  }\n\n  auto edgesSet = YGNodeEdges{root};\n\n  bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN);\n  bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING);\n  bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER);\n\n  int fieldFlags = edgesSet.get();\n  fieldFlags |= HAS_NEW_LAYOUT;\n\n  const int arrSize = 6 + (marginFieldSet ? 4 : 0) + (paddingFieldSet ? 4 : 0) +\n      (borderFieldSet ? 4 : 0);\n  float arr[18];\n  arr[LAYOUT_EDGE_SET_FLAG_INDEX] = static_cast<float>(fieldFlags);\n  arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root);\n  arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root);\n  arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root);\n  arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root);\n  arr[LAYOUT_DIRECTION_INDEX] =\n      static_cast<float>(YGNodeLayoutGetDirection(root));\n  if (marginFieldSet) {\n    arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft);\n    arr[LAYOUT_MARGIN_START_INDEX + 1] = YGNodeLayoutGetMargin(root, YGEdgeTop);\n    arr[LAYOUT_MARGIN_START_INDEX + 2] =\n        YGNodeLayoutGetMargin(root, YGEdgeRight);\n    arr[LAYOUT_MARGIN_START_INDEX + 3] =\n        YGNodeLayoutGetMargin(root, YGEdgeBottom);\n  }\n  if (paddingFieldSet) {\n    int paddingStartIndex =\n        LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4);\n    arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft);\n    arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop);\n    arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight);\n    arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom);\n  }\n\n  if (borderFieldSet) {\n    int borderStartIndex = LAYOUT_BORDER_START_INDEX -\n        (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4);\n    arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft);\n    arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop);\n    arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight);\n    arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom);\n  }\n\n  // Create scope to make sure to release any local refs created here\n  {\n    // Don't change this field name without changing the name of the field in\n    // Database.java\n    auto objectClass = facebook::yoga::vanillajni::make_local_ref(\n        env, env->GetObjectClass(obj.get()));\n    static const jfieldID arrField = facebook::yoga::vanillajni::getFieldId(\n        env, objectClass.get(), \"arr\", \"[F\");\n\n    ScopedLocalRef<jfloatArray> arrFinal =\n        make_local_ref(env, env->NewFloatArray(arrSize));\n    env->SetFloatArrayRegion(arrFinal.get(), 0, arrSize, arr);\n    env->SetObjectField(obj.get(), arrField, arrFinal.get());\n  }\n\n  YGNodeSetHasNewLayout(root, false);\n\n  for (size_t i = 0; i < YGNodeGetChildCount(root); i++) {\n    YGTransferLayoutOutputsRecursive(env, thiz, YGNodeGetChild(root, i));\n  }\n}\n\nstatic void jni_YGNodeCalculateLayoutJNI(\n    JNIEnv* env,\n    jobject obj,\n    jlong nativePointer,\n    jfloat width,\n    jfloat height,\n    jlongArray nativePointers,\n    jobjectArray javaNodes) {\n  try {\n    PtrJNodeMapVanilla* layoutContext = nullptr;\n    auto map = PtrJNodeMapVanilla{};\n    if (nativePointers != nullptr) {\n      map = PtrJNodeMapVanilla{nativePointers, javaNodes};\n      layoutContext = &map;\n    }\n\n    LayoutContext::Provider contextProvider(layoutContext);\n\n    const YGNodeRef root = _jlong2YGNodeRef(nativePointer);\n    YGNodeCalculateLayout(\n        root,\n        static_cast<float>(width),\n        static_cast<float>(height),\n        YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)));\n    YGTransferLayoutOutputsRecursive(env, obj, root);\n  } catch (const YogaJniException& jniException) {\n    ScopedLocalRef<jthrowable> throwable = jniException.getThrowable();\n    if (throwable.get() != nullptr) {\n      env->Throw(throwable.get());\n    }\n  } catch (const std::logic_error& ex) {\n    env->ExceptionClear();\n    jclass cl = env->FindClass(\"java/lang/IllegalStateException\");\n    static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(\n        env, cl, \"<init>\", \"(Ljava/lang/String;)V\");\n    auto throwable = env->NewObject(cl, methodId, env->NewStringUTF(ex.what()));\n    env->Throw(static_cast<jthrowable>(throwable));\n  }\n}\n\nstatic void\njni_YGNodeMarkDirtyJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  YGNodeMarkDirty(_jlong2YGNodeRef(nativePointer));\n}\n\nstatic jboolean\njni_YGNodeIsDirtyJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  return (jboolean)YGNodeIsDirty(_jlong2YGNodeRef(nativePointer));\n}\n\nstatic void jni_YGNodeCopyStyleJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong dstNativePointer,\n    jlong srcNativePointer) {\n  YGNodeCopyStyle(\n      _jlong2YGNodeRef(dstNativePointer), _jlong2YGNodeRef(srcNativePointer));\n}\n\n#define YG_NODE_JNI_STYLE_PROP(javatype, type, name)                           \\\n  static javatype jni_YGNodeStyleGet##name##JNI(                               \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {                 \\\n    return (javatype)YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer));    \\\n  }                                                                            \\\n                                                                               \\\n  static void jni_YGNodeStyleSet##name##JNI(                                   \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, javatype value) { \\\n    YGNodeStyleSet##name(                                                      \\\n        _jlong2YGNodeRef(nativePointer), static_cast<type>(value));            \\\n  }\n\n#define YG_NODE_JNI_STYLE_UNIT_PROP(name)                                    \\\n  static jlong jni_YGNodeStyleGet##name##JNI(                                \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {               \\\n    return YogaValue::asJavaLong(                                            \\\n        YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer)));              \\\n  }                                                                          \\\n                                                                             \\\n  static void jni_YGNodeStyleSet##name##JNI(                                 \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, jfloat value) { \\\n    YGNodeStyleSet##name(                                                    \\\n        _jlong2YGNodeRef(nativePointer), static_cast<float>(value));         \\\n  }                                                                          \\\n                                                                             \\\n  static void jni_YGNodeStyleSet##name##PercentJNI(                          \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, jfloat value) { \\\n    YGNodeStyleSet##name##Percent(                                           \\\n        _jlong2YGNodeRef(nativePointer), static_cast<float>(value));         \\\n  }\n\n#define YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(name)                   \\\n  YG_NODE_JNI_STYLE_UNIT_PROP(name)                              \\\n  static void jni_YGNodeStyleSet##name##AutoJNI(                 \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {   \\\n    YGNodeStyleSet##name##Auto(_jlong2YGNodeRef(nativePointer)); \\\n  }\n\n#define YG_NODE_JNI_STYLE_UNIT_PROP_AUTO_INTRINSIC(name) \\\n  YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(name)                 \\\n  YG_NODE_JNI_STYLE_UNIT_INTRINSIC(name)\n\n#define YG_NODE_JNI_STYLE_UNIT_PROP_INTRINSIC(name) \\\n  YG_NODE_JNI_STYLE_UNIT_PROP(name)                 \\\n  YG_NODE_JNI_STYLE_UNIT_INTRINSIC(name)\n\n#define YG_NODE_JNI_STYLE_UNIT_INTRINSIC(name)                         \\\n  static void jni_YGNodeStyleSet##name##MaxContentJNI(                 \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {         \\\n    YGNodeStyleSet##name##MaxContent(_jlong2YGNodeRef(nativePointer)); \\\n  }                                                                    \\\n  static void jni_YGNodeStyleSet##name##FitContentJNI(                 \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {         \\\n    YGNodeStyleSet##name##FitContent(_jlong2YGNodeRef(nativePointer)); \\\n  }                                                                    \\\n  static void jni_YGNodeStyleSet##name##StretchJNI(                    \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {         \\\n    YGNodeStyleSet##name##Stretch(_jlong2YGNodeRef(nativePointer));    \\\n  }\n\n#define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name)                            \\\n  static jlong jni_YGNodeStyleGet##name##JNI(                             \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, jint edge) { \\\n    return YogaValue::asJavaLong(                                         \\\n        YGNodeStyleGet##name(                                             \\\n            _jlong2YGNodeRef(nativePointer), static_cast<YGEdge>(edge))); \\\n  }                                                                       \\\n                                                                          \\\n  static void jni_YGNodeStyleSet##name##JNI(                              \\\n      JNIEnv* /*env*/,                                                    \\\n      jobject /*obj*/,                                                    \\\n      jlong nativePointer,                                                \\\n      jint edge,                                                          \\\n      jfloat value) {                                                     \\\n    YGNodeStyleSet##name(                                                 \\\n        _jlong2YGNodeRef(nativePointer),                                  \\\n        static_cast<YGEdge>(edge),                                        \\\n        static_cast<float>(value));                                       \\\n  }                                                                       \\\n                                                                          \\\n  static void jni_YGNodeStyleSet##name##PercentJNI(                       \\\n      JNIEnv* /*env*/,                                                    \\\n      jobject /*obj*/,                                                    \\\n      jlong nativePointer,                                                \\\n      jint edge,                                                          \\\n      jfloat value) {                                                     \\\n    YGNodeStyleSet##name##Percent(                                        \\\n        _jlong2YGNodeRef(nativePointer),                                  \\\n        static_cast<YGEdge>(edge),                                        \\\n        static_cast<float>(value));                                       \\\n  }\n\n#define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP_AUTO(name)                       \\\n  YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name)                                  \\\n  static void jni_YGNodeStyleSet##name##AutoJNI(                          \\\n      JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, jint edge) { \\\n    YGNodeStyleSet##name##Auto(                                           \\\n        _jlong2YGNodeRef(nativePointer), static_cast<YGEdge>(edge));      \\\n  }\n\nYG_NODE_JNI_STYLE_PROP(jint, YGDirection, Direction);\nYG_NODE_JNI_STYLE_PROP(jint, YGFlexDirection, FlexDirection);\nYG_NODE_JNI_STYLE_PROP(jint, YGJustify, JustifyContent);\nYG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignItems);\nYG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignSelf);\nYG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignContent);\nYG_NODE_JNI_STYLE_PROP(jint, YGPositionType, PositionType);\nYG_NODE_JNI_STYLE_PROP(jint, YGBoxSizing, BoxSizing);\nYG_NODE_JNI_STYLE_PROP(jint, YGWrap, FlexWrap);\nYG_NODE_JNI_STYLE_PROP(jint, YGOverflow, Overflow);\nYG_NODE_JNI_STYLE_PROP(jint, YGDisplay, Display);\nYG_NODE_JNI_STYLE_PROP(jfloat, float, Flex);\nYG_NODE_JNI_STYLE_PROP(jfloat, float, FlexGrow);\nYG_NODE_JNI_STYLE_PROP(jfloat, float, FlexShrink);\n\nYG_NODE_JNI_STYLE_UNIT_PROP_AUTO_INTRINSIC(FlexBasis);\nYG_NODE_JNI_STYLE_UNIT_PROP_AUTO_INTRINSIC(Width);\nYG_NODE_JNI_STYLE_UNIT_PROP_INTRINSIC(MinWidth);\nYG_NODE_JNI_STYLE_UNIT_PROP_INTRINSIC(MaxWidth);\nYG_NODE_JNI_STYLE_UNIT_PROP_AUTO_INTRINSIC(Height);\nYG_NODE_JNI_STYLE_UNIT_PROP_INTRINSIC(MinHeight);\nYG_NODE_JNI_STYLE_UNIT_PROP_INTRINSIC(MaxHeight);\n\nYG_NODE_JNI_STYLE_EDGE_UNIT_PROP_AUTO(Position);\n\nstatic jlong jni_YGNodeStyleGetMarginJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) {\n    return YogaValue::undefinedAsJavaLong();\n  }\n  return YogaValue::asJavaLong(\n      YGNodeStyleGetMargin(yogaNodeRef, static_cast<YGEdge>(edge)));\n}\n\nstatic void jni_YGNodeStyleSetMarginJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge,\n    jfloat margin) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef);\n  YGNodeStyleSetMargin(\n      yogaNodeRef, static_cast<YGEdge>(edge), static_cast<float>(margin));\n}\n\nstatic void jni_YGNodeStyleSetMarginPercentJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge,\n    jfloat percent) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef);\n  YGNodeStyleSetMarginPercent(\n      yogaNodeRef, static_cast<YGEdge>(edge), static_cast<float>(percent));\n}\n\nstatic void jni_YGNodeStyleSetMarginAutoJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef);\n  YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast<YGEdge>(edge));\n}\n\nstatic jlong jni_YGNodeStyleGetPaddingJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) {\n    return YogaValue::undefinedAsJavaLong();\n  }\n  return YogaValue::asJavaLong(\n      YGNodeStyleGetPadding(yogaNodeRef, static_cast<YGEdge>(edge)));\n}\n\nstatic void jni_YGNodeStyleSetPaddingJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge,\n    jfloat padding) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef);\n  YGNodeStyleSetPadding(\n      yogaNodeRef, static_cast<YGEdge>(edge), static_cast<float>(padding));\n}\n\nstatic void jni_YGNodeStyleSetPaddingPercentJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge,\n    jfloat percent) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef);\n  YGNodeStyleSetPaddingPercent(\n      yogaNodeRef, static_cast<YGEdge>(edge), static_cast<float>(percent));\n}\n\nstatic jfloat jni_YGNodeStyleGetBorderJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::BORDER)) {\n    return (jfloat)YGUndefined;\n  }\n  return (jfloat)YGNodeStyleGetBorder(yogaNodeRef, static_cast<YGEdge>(edge));\n}\n\nstatic void jni_YGNodeStyleSetBorderJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint edge,\n    jfloat border) {\n  YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer);\n  YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::BORDER).setOn(yogaNodeRef);\n  YGNodeStyleSetBorder(\n      yogaNodeRef, static_cast<YGEdge>(edge), static_cast<float>(border));\n}\n\nstatic void YGTransferLayoutDirection(YGNodeConstRef node, jobject javaNode) {\n  // Don't change this field name without changing the name of the field in\n  // Database.java\n  JNIEnv* env = getCurrentEnv();\n  auto objectClass = facebook::yoga::vanillajni::make_local_ref(\n      env, env->GetObjectClass(javaNode));\n  static const jfieldID layoutDirectionField =\n      facebook::yoga::vanillajni::getFieldId(\n          env, objectClass.get(), \"mLayoutDirection\", \"I\");\n  env->SetIntField(\n      javaNode,\n      layoutDirectionField,\n      static_cast<jint>(YGNodeLayoutGetDirection(node)));\n}\n\nstatic YGSize YGJNIMeasureFunc(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  if (auto obj = YGNodeJobject(node)) {\n    YGTransferLayoutDirection(node, obj.get());\n    JNIEnv* env = getCurrentEnv();\n    auto objectClass = facebook::yoga::vanillajni::make_local_ref(\n        env, env->GetObjectClass(obj.get()));\n    static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(\n        env, objectClass.get(), \"measure\", \"(FIFI)J\");\n    const auto measureResult = facebook::yoga::vanillajni::callLongMethod(\n        env, obj.get(), methodId, width, widthMode, height, heightMode);\n\n    static_assert(\n        sizeof(measureResult) == 8,\n        \"Expected measureResult to be 8 bytes, or two 32 bit ints\");\n\n    uint32_t wBits = 0xFFFFFFFF & (measureResult >> 32);\n    uint32_t hBits = 0xFFFFFFFF & measureResult;\n    auto measuredWidth = std::bit_cast<float>(wBits);\n    auto measuredHeight = std::bit_cast<float>(hBits);\n\n    return YGSize{measuredWidth, measuredHeight};\n  } else {\n    return YGSize{\n        widthMode == YGMeasureModeUndefined ? 0 : width,\n        heightMode == YGMeasureModeUndefined ? 0 : height,\n    };\n  }\n}\n\nstatic void jni_YGNodeSetHasMeasureFuncJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jboolean hasMeasureFunc) {\n  YGNodeSetMeasureFunc(\n      _jlong2YGNodeRef(nativePointer),\n      static_cast<bool>(hasMeasureFunc) ? YGJNIMeasureFunc : nullptr);\n}\n\nstatic float YGJNIBaselineFunc(YGNodeConstRef node, float width, float height) {\n  if (auto obj = YGNodeJobject(node)) {\n    JNIEnv* env = getCurrentEnv();\n    auto objectClass = facebook::yoga::vanillajni::make_local_ref(\n        env, env->GetObjectClass(obj.get()));\n    static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(\n        env, objectClass.get(), \"baseline\", \"(FF)F\");\n    return facebook::yoga::vanillajni::callFloatMethod(\n        env, obj.get(), methodId, width, height);\n  } else {\n    return height;\n  }\n}\n\nstatic void jni_YGNodeSetHasBaselineFuncJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jboolean hasBaselineFunc) {\n  YGNodeSetBaselineFunc(\n      _jlong2YGNodeRef(nativePointer),\n      static_cast<bool>(hasBaselineFunc) ? YGJNIBaselineFunc : nullptr);\n}\n\nstatic void jni_YGNodeSetAlwaysFormsContainingBlockJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jboolean alwaysFormsContainingBlock) {\n  YGNodeSetAlwaysFormsContainingBlock(\n      _jlong2YGNodeRef(nativePointer),\n      static_cast<bool>(alwaysFormsContainingBlock));\n}\n\nstatic jlong\njni_YGNodeCloneJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) {\n  auto node = _jlong2YGNodeRef(nativePointer);\n  const YGNodeRef clonedYogaNode = YGNodeClone(node);\n  YGNodeSetContext(clonedYogaNode, YGNodeGetContext(node));\n\n  return reinterpret_cast<jlong>(clonedYogaNode);\n}\n\nstatic jlong jni_YGNodeStyleGetGapJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint gutter) {\n  return YogaValue::asJavaLong(YGNodeStyleGetGap(\n      _jlong2YGNodeRef(nativePointer), static_cast<YGGutter>(gutter)));\n}\n\nstatic void jni_YGNodeStyleSetGapJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint gutter,\n    jfloat gapLength) {\n  YGNodeStyleSetGap(\n      _jlong2YGNodeRef(nativePointer),\n      static_cast<YGGutter>(gutter),\n      static_cast<float>(gapLength));\n}\n\nstatic void jni_YGNodeStyleSetGapPercentJNI(\n    JNIEnv* /*env*/,\n    jobject /*obj*/,\n    jlong nativePointer,\n    jint gutter,\n    jfloat gapLength) {\n  YGNodeStyleSetGapPercent(\n      _jlong2YGNodeRef(nativePointer),\n      static_cast<YGGutter>(gutter),\n      static_cast<float>(gapLength));\n}\n\n// Yoga specific properties, not compatible with flexbox specification\nYG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio);\n\nstatic JNINativeMethod methods[] = {\n    {\"jni_YGConfigNewJNI\", \"()J\", (void*)jni_YGConfigNewJNI},\n    {\"jni_YGConfigFreeJNI\", \"(J)V\", (void*)jni_YGConfigFreeJNI},\n    {\"jni_YGConfigSetExperimentalFeatureEnabledJNI\",\n     \"(JIZ)V\",\n     (void*)jni_YGConfigSetExperimentalFeatureEnabledJNI},\n    {\"jni_YGConfigSetUseWebDefaultsJNI\",\n     \"(JZ)V\",\n     (void*)jni_YGConfigSetUseWebDefaultsJNI},\n    {\"jni_YGConfigSetPointScaleFactorJNI\",\n     \"(JF)V\",\n     (void*)jni_YGConfigSetPointScaleFactorJNI},\n    {\"jni_YGConfigSetErrataJNI\", \"(JI)V\", (void*)jni_YGConfigSetErrataJNI},\n    {\"jni_YGConfigGetErrataJNI\", \"(J)I\", (void*)jni_YGConfigGetErrataJNI},\n    {\"jni_YGConfigSetLoggerJNI\",\n     \"(JLcom/facebook/yoga/YogaLogger;)V\",\n     (void*)jni_YGConfigSetLoggerJNI},\n    {\"jni_YGNodeNewJNI\", \"()J\", (void*)jni_YGNodeNewJNI},\n    {\"jni_YGNodeNewWithConfigJNI\", \"(J)J\", (void*)jni_YGNodeNewWithConfigJNI},\n    {\"jni_YGNodeFinalizeJNI\", \"(J)V\", (void*)jni_YGNodeFinalizeJNI},\n    {\"jni_YGNodeResetJNI\", \"(J)V\", (void*)jni_YGNodeResetJNI},\n    {\"jni_YGNodeInsertChildJNI\", \"(JJI)V\", (void*)jni_YGNodeInsertChildJNI},\n    {\"jni_YGNodeSwapChildJNI\", \"(JJI)V\", (void*)jni_YGNodeSwapChildJNI},\n    {\"jni_YGNodeSetIsReferenceBaselineJNI\",\n     \"(JZ)V\",\n     (void*)jni_YGNodeSetIsReferenceBaselineJNI},\n    {\"jni_YGNodeIsReferenceBaselineJNI\",\n     \"(J)Z\",\n     (void*)jni_YGNodeIsReferenceBaselineJNI},\n    {\"jni_YGNodeRemoveAllChildrenJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeRemoveAllChildrenJNI},\n    {\"jni_YGNodeRemoveChildJNI\", \"(JJ)V\", (void*)jni_YGNodeRemoveChildJNI},\n    {\"jni_YGNodeCalculateLayoutJNI\",\n     \"(JFF[J[Lcom/facebook/yoga/YogaNodeJNIBase;)V\",\n     (void*)jni_YGNodeCalculateLayoutJNI},\n    {\"jni_YGNodeMarkDirtyJNI\", \"(J)V\", (void*)jni_YGNodeMarkDirtyJNI},\n    {\"jni_YGNodeIsDirtyJNI\", \"(J)Z\", (void*)jni_YGNodeIsDirtyJNI},\n    {\"jni_YGNodeCopyStyleJNI\", \"(JJ)V\", (void*)jni_YGNodeCopyStyleJNI},\n    {\"jni_YGNodeStyleGetDirectionJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetDirectionJNI},\n    {\"jni_YGNodeStyleSetDirectionJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetDirectionJNI},\n    {\"jni_YGNodeStyleGetFlexDirectionJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetFlexDirectionJNI},\n    {\"jni_YGNodeStyleSetFlexDirectionJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetFlexDirectionJNI},\n    {\"jni_YGNodeStyleGetJustifyContentJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetJustifyContentJNI},\n    {\"jni_YGNodeStyleSetJustifyContentJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetJustifyContentJNI},\n    {\"jni_YGNodeStyleGetAlignItemsJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetAlignItemsJNI},\n    {\"jni_YGNodeStyleSetAlignItemsJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetAlignItemsJNI},\n    {\"jni_YGNodeStyleGetAlignSelfJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetAlignSelfJNI},\n    {\"jni_YGNodeStyleSetAlignSelfJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetAlignSelfJNI},\n    {\"jni_YGNodeStyleGetAlignContentJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetAlignContentJNI},\n    {\"jni_YGNodeStyleSetAlignContentJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetAlignContentJNI},\n    {\"jni_YGNodeStyleGetPositionTypeJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetPositionTypeJNI},\n    {\"jni_YGNodeStyleSetPositionTypeJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetPositionTypeJNI},\n    {\"jni_YGNodeStyleGetBoxSizingJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetBoxSizingJNI},\n    {\"jni_YGNodeStyleSetBoxSizingJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetBoxSizingJNI},\n    {\"jni_YGNodeStyleGetFlexWrapJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetFlexWrapJNI},\n    {\"jni_YGNodeStyleSetFlexWrapJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetFlexWrapJNI},\n    {\"jni_YGNodeStyleGetOverflowJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetOverflowJNI},\n    {\"jni_YGNodeStyleSetOverflowJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetOverflowJNI},\n    {\"jni_YGNodeStyleGetDisplayJNI\",\n     \"(J)I\",\n     (void*)jni_YGNodeStyleGetDisplayJNI},\n    {\"jni_YGNodeStyleSetDisplayJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetDisplayJNI},\n    {\"jni_YGNodeStyleGetFlexJNI\", \"(J)F\", (void*)jni_YGNodeStyleGetFlexJNI},\n    {\"jni_YGNodeStyleSetFlexJNI\", \"(JF)V\", (void*)jni_YGNodeStyleSetFlexJNI},\n    {\"jni_YGNodeStyleGetFlexGrowJNI\",\n     \"(J)F\",\n     (void*)jni_YGNodeStyleGetFlexGrowJNI},\n    {\"jni_YGNodeStyleSetFlexGrowJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetFlexGrowJNI},\n    {\"jni_YGNodeStyleGetFlexShrinkJNI\",\n     \"(J)F\",\n     (void*)jni_YGNodeStyleGetFlexShrinkJNI},\n    {\"jni_YGNodeStyleSetFlexShrinkJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetFlexShrinkJNI},\n    {\"jni_YGNodeStyleGetFlexBasisJNI\",\n     \"(J)J\",\n     (void*)jni_YGNodeStyleGetFlexBasisJNI},\n    {\"jni_YGNodeStyleSetFlexBasisJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisJNI},\n    {\"jni_YGNodeStyleSetFlexBasisPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisPercentJNI},\n    {\"jni_YGNodeStyleSetFlexBasisAutoJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisAutoJNI},\n    {\"jni_YGNodeStyleSetFlexBasisMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisMaxContentJNI},\n    {\"jni_YGNodeStyleSetFlexBasisFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisFitContentJNI},\n    {\"jni_YGNodeStyleSetFlexBasisStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetFlexBasisStretchJNI},\n    {\"jni_YGNodeStyleGetMarginJNI\",\n     \"(JI)J\",\n     (void*)jni_YGNodeStyleGetMarginJNI},\n    {\"jni_YGNodeStyleSetMarginJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetMarginJNI},\n    {\"jni_YGNodeStyleSetMarginPercentJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetMarginPercentJNI},\n    {\"jni_YGNodeStyleSetMarginAutoJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetMarginAutoJNI},\n    {\"jni_YGNodeStyleGetPaddingJNI\",\n     \"(JI)J\",\n     (void*)jni_YGNodeStyleGetPaddingJNI},\n    {\"jni_YGNodeStyleSetPaddingJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetPaddingJNI},\n    {\"jni_YGNodeStyleSetPaddingPercentJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetPaddingPercentJNI},\n    {\"jni_YGNodeStyleGetBorderJNI\",\n     \"(JI)F\",\n     (void*)jni_YGNodeStyleGetBorderJNI},\n    {\"jni_YGNodeStyleSetBorderJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetBorderJNI},\n    {\"jni_YGNodeStyleGetPositionJNI\",\n     \"(JI)J\",\n     (void*)jni_YGNodeStyleGetPositionJNI},\n    {\"jni_YGNodeStyleSetPositionJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetPositionJNI},\n    {\"jni_YGNodeStyleSetPositionPercentJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetPositionPercentJNI},\n    {\"jni_YGNodeStyleSetPositionAutoJNI\",\n     \"(JI)V\",\n     (void*)jni_YGNodeStyleSetPositionAutoJNI},\n    {\"jni_YGNodeStyleGetWidthJNI\", \"(J)J\", (void*)jni_YGNodeStyleGetWidthJNI},\n    {\"jni_YGNodeStyleSetWidthJNI\", \"(JF)V\", (void*)jni_YGNodeStyleSetWidthJNI},\n    {\"jni_YGNodeStyleSetWidthPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetWidthPercentJNI},\n    {\"jni_YGNodeStyleSetWidthAutoJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetWidthAutoJNI},\n    {\"jni_YGNodeStyleSetWidthMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetWidthMaxContentJNI},\n    {\"jni_YGNodeStyleSetWidthFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetWidthFitContentJNI},\n    {\"jni_YGNodeStyleSetWidthStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetWidthStretchJNI},\n    {\"jni_YGNodeStyleGetHeightJNI\", \"(J)J\", (void*)jni_YGNodeStyleGetHeightJNI},\n    {\"jni_YGNodeStyleSetHeightJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetHeightJNI},\n    {\"jni_YGNodeStyleSetHeightPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetHeightPercentJNI},\n    {\"jni_YGNodeStyleSetHeightAutoJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetHeightAutoJNI},\n    {\"jni_YGNodeStyleSetHeightMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetHeightMaxContentJNI},\n    {\"jni_YGNodeStyleSetHeightFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetHeightFitContentJNI},\n    {\"jni_YGNodeStyleSetHeightStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetHeightStretchJNI},\n    {\"jni_YGNodeStyleGetMinWidthJNI\",\n     \"(J)J\",\n     (void*)jni_YGNodeStyleGetMinWidthJNI},\n    {\"jni_YGNodeStyleSetMinWidthJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMinWidthJNI},\n    {\"jni_YGNodeStyleSetMinWidthPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMinWidthPercentJNI},\n    {\"jni_YGNodeStyleSetMinWidthMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinWidthMaxContentJNI},\n    {\"jni_YGNodeStyleSetMinWidthFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinWidthFitContentJNI},\n    {\"jni_YGNodeStyleSetMinWidthStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinWidthStretchJNI},\n    {\"jni_YGNodeStyleGetMinHeightJNI\",\n     \"(J)J\",\n     (void*)jni_YGNodeStyleGetMinHeightJNI},\n    {\"jni_YGNodeStyleSetMinHeightJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMinHeightJNI},\n    {\"jni_YGNodeStyleSetMinHeightPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMinHeightPercentJNI},\n    {\"jni_YGNodeStyleSetMinHeightMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinHeightMaxContentJNI},\n    {\"jni_YGNodeStyleSetMinHeightFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinHeightFitContentJNI},\n    {\"jni_YGNodeStyleSetMinHeightStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMinHeightStretchJNI},\n    {\"jni_YGNodeStyleGetMaxWidthJNI\",\n     \"(J)J\",\n     (void*)jni_YGNodeStyleGetMaxWidthJNI},\n    {\"jni_YGNodeStyleSetMaxWidthJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMaxWidthJNI},\n    {\"jni_YGNodeStyleSetMaxWidthPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMaxWidthPercentJNI},\n    {\"jni_YGNodeStyleSetMaxWidthMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxWidthMaxContentJNI},\n    {\"jni_YGNodeStyleSetMaxWidthFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxWidthFitContentJNI},\n    {\"jni_YGNodeStyleSetMaxWidthStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxWidthStretchJNI},\n    {\"jni_YGNodeStyleGetMaxHeightJNI\",\n     \"(J)J\",\n     (void*)jni_YGNodeStyleGetMaxHeightJNI},\n    {\"jni_YGNodeStyleSetMaxHeightJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMaxHeightJNI},\n    {\"jni_YGNodeStyleSetMaxHeightPercentJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetMaxHeightPercentJNI},\n    {\"jni_YGNodeStyleSetMaxHeightMaxContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxHeightMaxContentJNI},\n    {\"jni_YGNodeStyleSetMaxHeightFitContentJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxHeightFitContentJNI},\n    {\"jni_YGNodeStyleSetMaxHeightStretchJNI\",\n     \"(J)V\",\n     (void*)jni_YGNodeStyleSetMaxHeightStretchJNI},\n    {\"jni_YGNodeStyleGetAspectRatioJNI\",\n     \"(J)F\",\n     (void*)jni_YGNodeStyleGetAspectRatioJNI},\n    {\"jni_YGNodeStyleSetAspectRatioJNI\",\n     \"(JF)V\",\n     (void*)jni_YGNodeStyleSetAspectRatioJNI},\n    {\"jni_YGNodeSetHasMeasureFuncJNI\",\n     \"(JZ)V\",\n     (void*)jni_YGNodeSetHasMeasureFuncJNI},\n    {\"jni_YGNodeStyleGetGapJNI\", \"(JI)J\", (void*)jni_YGNodeStyleGetGapJNI},\n    {\"jni_YGNodeStyleSetGapJNI\", \"(JIF)V\", (void*)jni_YGNodeStyleSetGapJNI},\n    {\"jni_YGNodeStyleSetGapPercentJNI\",\n     \"(JIF)V\",\n     (void*)jni_YGNodeStyleSetGapPercentJNI},\n    {\"jni_YGNodeSetHasBaselineFuncJNI\",\n     \"(JZ)V\",\n     (void*)jni_YGNodeSetHasBaselineFuncJNI},\n    {\"jni_YGNodeSetAlwaysFormsContainingBlockJNI\",\n     \"(JZ)V\",\n     (void*)jni_YGNodeSetAlwaysFormsContainingBlockJNI},\n    {\"jni_YGNodeCloneJNI\", \"(J)J\", (void*)jni_YGNodeCloneJNI},\n};\n\nvoid YGJNIVanilla::registerNatives(JNIEnv* env) {\n  facebook::yoga::vanillajni::registerNatives(\n      env,\n      \"com/facebook/yoga/YogaNative\",\n      methods,\n      sizeof(methods) / sizeof(JNINativeMethod));\n}\n"
  },
  {
    "path": "java/jni/YGJNIVanilla.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"jni.h\"\n\nnamespace YGJNIVanilla {\nvoid registerNatives(JNIEnv* env);\n};\n"
  },
  {
    "path": "java/jni/YGJTypesVanilla.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <map>\n#include <vector>\n\n#include <yoga/Yoga.h>\n\n#include \"common.h\"\n#include \"jni.h\"\n\nclass PtrJNodeMapVanilla {\n  std::map<YGNodeConstRef, jsize> ptrsToIdxs_{};\n  jobjectArray javaNodes_{};\n\n public:\n  PtrJNodeMapVanilla() = default;\n\n  PtrJNodeMapVanilla(jlongArray javaNativePointers, jobjectArray javaNodes)\n      : javaNodes_{javaNodes} {\n    using namespace facebook::yoga::vanillajni;\n\n    JNIEnv* env = getCurrentEnv();\n    jsize nativePointersSize = env->GetArrayLength(javaNativePointers);\n    std::vector<jlong> nativePointers(static_cast<size_t>(nativePointersSize));\n    env->GetLongArrayRegion(\n        javaNativePointers, 0, nativePointersSize, nativePointers.data());\n\n    for (jsize i = 0; i < nativePointersSize; ++i) {\n      ptrsToIdxs_[(YGNodeConstRef)nativePointers[static_cast<size_t>(i)]] = i;\n    }\n  }\n\n  facebook::yoga::vanillajni::ScopedLocalRef<jobject> ref(YGNodeConstRef node) {\n    using namespace facebook::yoga::vanillajni;\n\n    JNIEnv* env = getCurrentEnv();\n    auto idx = ptrsToIdxs_.find(node);\n    if (idx == ptrsToIdxs_.end()) {\n      return ScopedLocalRef<jobject>(env);\n    } else {\n      return make_local_ref(\n          env, env->GetObjectArrayElement(javaNodes_, idx->second));\n    }\n  }\n};\n"
  },
  {
    "path": "java/jni/YogaJniException.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"YogaJniException.h\"\n#include <stdexcept>\n#include <string>\n#include \"common.h\"\n\nnamespace facebook::yoga::vanillajni {\n\nYogaJniException::YogaJniException() {\n  jclass cl = getCurrentEnv()->FindClass(\"java/lang/RuntimeException\");\n  static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId(\n      getCurrentEnv(), cl, \"<init>\", \"()V\");\n  auto throwable = getCurrentEnv()->NewObject(cl, methodId);\n  throwable_ =\n      newGlobalRef(getCurrentEnv(), static_cast<jthrowable>(throwable));\n}\n\nYogaJniException::YogaJniException(jthrowable throwable) {\n  throwable_ = newGlobalRef(getCurrentEnv(), throwable);\n}\n\nYogaJniException::YogaJniException(YogaJniException&& rhs) noexcept\n    : throwable_(std::move(rhs.throwable_)) {}\n\nYogaJniException::YogaJniException(const YogaJniException& rhs) {\n  throwable_ = newGlobalRef(getCurrentEnv(), rhs.throwable_.get());\n}\n\nYogaJniException::~YogaJniException() {\n  try {\n    throwable_.reset();\n  } catch (...) {\n    std::terminate();\n  }\n}\n\nScopedLocalRef<jthrowable> YogaJniException::getThrowable() const noexcept {\n  return make_local_ref(\n      getCurrentEnv(),\n      static_cast<jthrowable>(getCurrentEnv()->NewLocalRef(throwable_.get())));\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/YogaJniException.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <stdexcept>\n#include <string>\n#include \"common.h\"\n\nnamespace facebook::yoga::vanillajni {\n/**\n * This class wraps a Java exception (jthrowable) into a C++ exception; A global\n * reference to Java exception (jthrowable) is made so that the exception object\n * does not gets cleared before jni call completion\n */\nclass YogaJniException : public std::exception {\n public:\n  YogaJniException();\n  ~YogaJniException() override;\n\n  explicit YogaJniException(jthrowable throwable);\n\n  YogaJniException(YogaJniException&& rhs) noexcept;\n\n  YogaJniException(const YogaJniException& rhs);\n\n  ScopedLocalRef<jthrowable> getThrowable() const noexcept;\n\n private:\n  ScopedGlobalRef<jthrowable> throwable_;\n};\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"common.h\"\n\nnamespace facebook::yoga::vanillajni {\n\nvoid registerNatives(\n    JNIEnv* env,\n    const char* className,\n    const JNINativeMethod methods[],\n    size_t numMethods) {\n  jclass clazz = env->FindClass(className);\n\n  assertNoPendingJniExceptionIf(env, clazz == nullptr);\n\n  auto result =\n      env->RegisterNatives(clazz, methods, static_cast<int32_t>(numMethods));\n\n  assertNoPendingJniExceptionIf(env, result != JNI_OK);\n}\n\njmethodID getStaticMethodId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* methodName,\n    const char* methodDescriptor) {\n  jmethodID methodId =\n      env->GetStaticMethodID(clazz, methodName, methodDescriptor);\n  assertNoPendingJniExceptionIf(env, methodId == nullptr);\n  return methodId;\n}\n\njmethodID getMethodId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* methodName,\n    const char* methodDescriptor) {\n  jmethodID methodId = env->GetMethodID(clazz, methodName, methodDescriptor);\n  assertNoPendingJniExceptionIf(env, methodId == nullptr);\n  return methodId;\n}\n\njfieldID getFieldId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* fieldName,\n    const char* fieldSignature) {\n  jfieldID fieldId = env->GetFieldID(clazz, fieldName, fieldSignature);\n  assertNoPendingJniExceptionIf(env, fieldId == nullptr);\n  return fieldId;\n}\n\n#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jnitype, readableType) \\\n  DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) {          \\\n    va_list args;                                                              \\\n    va_start(args, methodId);                                                  \\\n    jnitype result = env->Call##readableType##MethodV(obj, methodId, args);    \\\n    va_end(args);                                                              \\\n    assertNoPendingJniException(env);                                          \\\n    return result;                                                             \\\n  }\n\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jlong, Long);\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jfloat, Float);\n\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void) {\n  va_list args;\n  va_start(args, methodId);\n  env->CallVoidMethodV(obj, methodId, args);\n  va_end(args);\n  assertNoPendingJniException(env);\n}\n\nScopedLocalRef<jobject>\ncallStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...) {\n  va_list args;\n  va_start(args, methodId);\n  jobject result = env->CallStaticObjectMethodV(clazz, methodId, args);\n  va_end(args);\n  assertNoPendingJniExceptionIf(env, result == nullptr);\n  return make_local_ref(env, result);\n}\n\nScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj) {\n  jobject result = env->NewGlobalRef(obj);\n\n  if (result == nullptr) {\n    logErrorMessageAndDie(\"Could not obtain global reference from object\");\n  }\n\n  return make_global_ref(result);\n}\n\nScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj) {\n  auto result = static_cast<jthrowable>(env->NewGlobalRef(obj));\n\n  if (result == nullptr) {\n    logErrorMessageAndDie(\"Could not obtain global reference from object\");\n  }\n\n  return make_global_ref(result);\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include \"ScopedGlobalRef.h\"\n#include \"ScopedLocalRef.h\"\n\nnamespace facebook::yoga::vanillajni {\n\n/**\n * Registers a set of methods for a JNI class. Aborts if registration fails.\n */\nvoid registerNatives(\n    JNIEnv* env,\n    const char* className,\n    const JNINativeMethod methods[],\n    size_t numMethods);\n\n/**\n * Returns a jmethodID for a class static method. Aborts if any error happens.\n */\njmethodID getStaticMethodId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* methodName,\n    const char* methodDescriptor);\n\n/**\n * Returns a jmethodID for a class non-static method. Aborts if any error\n * happens.\n */\njmethodID getMethodId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* methodName,\n    const char* methodDescriptor);\n\n/**\n * Returns a class non-static field ID. Aborts if any error happens.\n */\njfieldID getFieldId(\n    JNIEnv* env,\n    jclass clazz,\n    const char* fieldName,\n    const char* fieldSignature);\n\n// Helper methods to call a non-static method on an object depending on the\n// return type. Each method will abort the execution if an error\n// (such as a Java pending exception) is detected after invoking the\n// Java method.\n#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) \\\n  jnitype call##readableType##Method(                                     \\\n      JNIEnv* env, jobject obj, jmethodID methodId, ...)\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void);\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jlong, Long);\nDEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jfloat, Float);\n\nScopedLocalRef<jobject>\ncallStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...);\n\n/**\n * Given a local or a global reference, this method creates a new global\n * reference out of it. If any error happens, aborts the process.\n */\nScopedGlobalRef<jobject> newGlobalRef(JNIEnv* env, jobject obj);\n\nScopedGlobalRef<jthrowable> newGlobalRef(JNIEnv* env, jthrowable obj);\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/corefunctions.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"corefunctions.h\"\n#include \"YogaJniException.h\"\n#include \"macros.h\"\n\nnamespace facebook::yoga::vanillajni {\n\nnamespace {\nJavaVM* globalVm = nullptr;\nstruct JavaVMInitializer {\n  explicit JavaVMInitializer(JavaVM* vm) {\n    if (!vm) {\n      logErrorMessageAndDie(\n          \"You cannot pass a NULL JavaVM to ensureInitialized\");\n    }\n    globalVm = vm;\n  }\n};\n} // namespace\n\njint ensureInitialized(JNIEnv** env, JavaVM* vm) {\n  static JavaVMInitializer init(vm);\n\n  if (env == nullptr) {\n    logErrorMessageAndDie(\n        \"Need to pass a valid JNIEnv pointer to vanillajni initialization \"\n        \"routine\");\n  }\n\n  if (vm->GetEnv(reinterpret_cast<void**>(env), JNI_VERSION_1_6) != JNI_OK) {\n    logErrorMessageAndDie(\n        \"Error retrieving JNIEnv during initialization of vanillajni\");\n  }\n\n  return JNI_VERSION_1_6;\n}\n\n// TODO why we need JNIEXPORT for getCurrentEnv ?\nJNIEXPORT JNIEnv* getCurrentEnv() {\n  JNIEnv* env = nullptr;\n  jint ret = globalVm->GetEnv((void**)&env, JNI_VERSION_1_6);\n  if (ret != JNI_OK) {\n    logErrorMessageAndDie(\n        \"There was an error retrieving the current JNIEnv. Make sure the \"\n        \"current thread is attached\");\n  }\n  return env;\n}\n\nvoid logErrorMessageAndDie(const char* message) {\n  (void)message;\n  VANILLAJNI_LOG_ERROR(\n      \"VanillaJni\",\n      \"Aborting due to error detected in native code: %s\",\n      message);\n  VANILLAJNI_DIE();\n}\n\nvoid assertNoPendingJniException(JNIEnv* env) {\n  if (env->ExceptionCheck() == JNI_FALSE) {\n    return;\n  }\n\n  auto throwable = env->ExceptionOccurred();\n  if (throwable == nullptr) {\n    logErrorMessageAndDie(\"Unable to get pending JNI exception.\");\n  }\n  env->ExceptionClear();\n  throw YogaJniException(throwable);\n}\n\nvoid assertNoPendingJniExceptionIf(JNIEnv* env, bool condition) {\n  if (!condition) {\n    return;\n  }\n\n  if (env->ExceptionCheck() == JNI_TRUE) {\n    assertNoPendingJniException(env);\n    return;\n  }\n\n  throw YogaJniException();\n}\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/corefunctions.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <jni.h>\n#include <cstddef>\n\nnamespace facebook::yoga::vanillajni {\n\n/**\n * This method has to be called before using the vanillajni library. This method\n * is typically called when doing initialization in the \"on load\" JNI hook of a\n * particular library.\n *\n * This method is thread safe, and after the first time it's called it has no\n * initialization effect.\n *\n * @param  env use this output parameter to get a JNIEnv to use for things such\n * as registering native methods and such.\n * @param  vm  the VM instance passed by JNI. This is usually the VM instance\n * that is passed to the \"on load\" JNI hook.\n * @return an integer value to return from the \"on load\" hook.\n */\njint ensureInitialized(JNIEnv** env, JavaVM* vm);\n\n/**\n * Returns a JNIEnv* suitable for the current thread. If the current thread is\n * not attached to the Java VM, this method aborts execution.\n */\nJNIEnv* getCurrentEnv();\n\n/**\n * Logs an error message and aborts the current process.\n */\nvoid logErrorMessageAndDie(const char* message);\n\n/**\n * Checks whether there is a pending JNI exception. If so, it logs an error\n * message and aborts the current process. Otherwise it does nothing.\n */\nvoid assertNoPendingJniException(JNIEnv* env);\n\nvoid assertNoPendingJniExceptionIf(JNIEnv* env, bool condition);\n\n} // namespace facebook::yoga::vanillajni\n"
  },
  {
    "path": "java/jni/macros.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdlib>\n\n#ifdef __ANDROID__\n#include <android/log.h>\n#endif\n\n#ifdef __ANDROID__\n#define VANILLAJNI_LOG_ERROR(tag, format, ...) \\\n  __android_log_print(ANDROID_LOG_ERROR, tag, format, ##__VA_ARGS__)\n#else\n#define VANILLAJNI_LOG_ERROR(tag, format, ...)\n#endif\n\n#define VANILLAJNI_DIE() std::abort()\n"
  },
  {
    "path": "java/jni/yogajni.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"YGJNIVanilla.h\"\n#include \"common.h\"\n\nusing namespace facebook::yoga;\n\njint JNI_OnLoad(JavaVM* vm, void* /*unused*/) {\n  JNIEnv* env = nullptr;\n  jint ret = vanillajni::ensureInitialized(&env, vm);\n  YGJNIVanilla::registerNatives(env);\n  return ret;\n}\n"
  },
  {
    "path": "java/proguard-rules.pro",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n-keep,allowobfuscation @interface com.facebook.yoga.annotations.DoNotStrip\n-keep @com.facebook.yoga.annotations.DoNotStrip class *\n-keepclassmembers class * {\n    @com.facebook.yoga.annotations.DoNotStrip *;\n}\n"
  },
  {
    "path": "java/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!--\n  Copyright (c) Facebook, Inc. and its affiliates.\n  \n  This source code is licensed under the MIT license found in the\n  LICENSE file in the root directory of this source tree.\n-->\n\n<resources>\n  <string name=\"app_name\">Yoga</string>\n</resources>\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/TestParametrization.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class TestParametrization {\n  public static Iterable<NodeFactory> nodeFactories() {\n    NodeFactory nodeFactory = new NodeFactory() {\n      @Override\n      public YogaNode create() {\n        return YogaNodeFactory.create();\n      }\n\n      @Override\n      public YogaNode create(YogaConfig config) {\n        return YogaNodeFactory.create(config);\n      }\n\n      @Override\n      public String toString() {\n        return \"JNI\";\n      }\n    };\n    return Arrays.asList(nodeFactory);\n  }\n\n\n  public interface NodeFactory {\n    YogaNode create();\n    YogaNode create(YogaConfig config);\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YGAlignBaselineTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\n\n@RunWith(Parameterized.class)\npublic class YGAlignBaselineTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  private YogaBaselineFunction getBaselineFunc() {\n    return new YogaBaselineFunction() {\n      @Override\n      public float baseline(YogaNode node, float width, float height) {\n        return height / 2;\n      }\n    };\n  }\n\n  @Test\n  public void test_align_baseline_parent_using_child_in_column_as_reference() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createYGNode(config, YogaFlexDirection.ROW, 1000f, 1000f, true);\n\n    final YogaNode root_child0 = createYGNode(config, YogaFlexDirection.COLUMN, 500f, 600f, false);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createYGNode(config, YogaFlexDirection.COLUMN, 500f, 800f, false);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 =\n        createYGNode(config, YogaFlexDirection.COLUMN, 500f, 300f, false);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 =\n        createYGNode(config, YogaFlexDirection.COLUMN, 500f, 400f, false);\n    root_child1_child1.setBaselineFunction(getBaselineFunc());\n    root_child1_child1.setIsReferenceBaseline(true);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n\n    assertEquals(500f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(300f, root_child1_child1.getLayoutY(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_parent_using_child_in_row_as_reference() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createYGNode(config, YogaFlexDirection.ROW, 1000f, 1000f, true);\n\n    final YogaNode root_child0 = createYGNode(config, YogaFlexDirection.COLUMN, 500f, 600f, false);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createYGNode(config, YogaFlexDirection.ROW, 500f, 800f, true);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 =\n        createYGNode(config, YogaFlexDirection.COLUMN, 500f, 500f, false);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 =\n        createYGNode(config, YogaFlexDirection.COLUMN, 500f, 400f, false);\n    root_child1_child1.setBaselineFunction(getBaselineFunc());\n    root_child1_child1.setIsReferenceBaseline(true);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n\n    assertEquals(500f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n\n    assertEquals(500f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(300f, root_child1_child1.getLayoutY(), 0.0f);\n  }\n\n  private YogaNode createYGNode(\n      YogaConfig config,\n      YogaFlexDirection flexDirection,\n      float width,\n      float height,\n      boolean alignBaseline) {\n    YogaNode node = mNodeFactory.create(config);\n    node.setFlexDirection(flexDirection);\n    node.setWidth(width);\n    node.setHeight(height);\n    if (alignBaseline) {\n      node.setAlignItems(YogaAlign.BASELINE);\n    }\n    return node;\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YogaExceptionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertNotSame;\nimport static org.junit.Assert.assertNull;\nimport static org.junit.Assert.assertTrue;\nimport static org.junit.Assert.fail;\n\nimport java.lang.ref.WeakReference;\nimport java.util.ArrayList;\nimport java.util.concurrent.atomic.AtomicBoolean;\nimport java.util.concurrent.atomic.AtomicReference;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\n\n@RunWith(Parameterized.class)\npublic class YogaExceptionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test(expected = RuntimeException.class)\n  public void testBaselineThrows() {\n    final YogaNode root = createNode();\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode child1 = createNode();\n    root.addChildAt(child1, 0);\n\n    final YogaNode child2 = createNode();\n    child2.setBaselineFunction(new YogaBaselineFunction() {\n        public float baseline(YogaNode node, float width, float height) {\n          throw new RuntimeException();\n        }\n    });\n    root.addChildAt(child2, 1);\n\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n  }\n\n  @Test\n  public void testBaselineThrowsAndStops() {\n    final YogaNode root = createNode();\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode child1 = createNode();\n    root.addChildAt(child1, 0);\n\n    final YogaNode child2 = createNode();\n    final AtomicReference<Exception> expected = new AtomicReference();\n    child2.setBaselineFunction(new YogaBaselineFunction() {\n        public float baseline(YogaNode node, float width, float height) {\n          RuntimeException e = new RuntimeException();\n          expected.set(e);\n          throw e;\n        }\n    });\n    root.addChildAt(child2, 1);\n\n    final YogaNode child3 = createNode();\n    final AtomicBoolean child3Called = new AtomicBoolean();\n    child3.setBaselineFunction(new YogaBaselineFunction() {\n        public float baseline(YogaNode node, float width, float height) {\n          child3Called.set(true);\n          return 1.0f;\n        }\n    });\n    root.addChildAt(child3, 2);\n\n    try {\n      root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n      fail();\n    } catch (RuntimeException e) {\n      assertEquals(expected.get(), e);\n    }\n    assertFalse(child3Called.get());\n  }\n\n  @Test(expected = RuntimeException.class)\n  public void testMeasureThrows() {\n    final YogaNode node = createNode();\n    node.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          throw new RuntimeException();\n        }\n    });\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n  }\n\n  @Test\n  public void testMeasureThrowsAndStops() {\n    final YogaNode root = createNode();\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode child1 = createNode();\n    root.addChildAt(child1, 0);\n\n    final YogaNode child2 = createNode();\n    final AtomicReference<Exception> expected = new AtomicReference();\n    child2.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          RuntimeException e = new RuntimeException();\n          expected.set(e);\n          throw e;\n        }\n    });\n    root.addChildAt(child2, 1);\n\n    final YogaNode child3 = createNode();\n    final AtomicBoolean child3Called = new AtomicBoolean();\n    child3.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          child3Called.set(true);\n          return 1;\n        }\n    });\n    root.addChildAt(child3, 2);\n\n    try {\n      root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n      fail();\n    } catch (RuntimeException e) {\n      assertEquals(expected.get(), e);\n    }\n    assertFalse(child3Called.get());\n  }\n\n  private YogaNode createNode() {\n    return mNodeFactory.create();\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YogaLoggerTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport org.junit.Test;\nimport java.lang.ref.WeakReference;\nimport java.util.List;\nimport java.util.ArrayList;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.fail;\n\npublic class YogaLoggerTest {\n\n  @Test\n  public void testRemovingLoggerFromConfig() throws Exception {\n    final List<String> logs = new ArrayList<>();\n\n    final YogaConfig config = YogaConfigFactory.create();\n    YogaLogger logger = new YogaLogger() {\n      @Override\n      public void log(YogaLogLevel level, String message) {\n        logs.add(message);\n      }\n    };\n    config.setLogger(logger);\n\n    final YogaNode root = YogaNodeFactory.create(config);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode child1 = YogaNodeFactory.create(config);\n    root.addChildAt(child1, 0);\n\n    final YogaNode child2 = YogaNodeFactory.create(config);\n    child2.setBaselineFunction(new YogaBaselineFunction() {\n        public float baseline(YogaNode node, float width, float height) {\n          return Float.NaN;\n        }\n    });\n    root.addChildAt(child2, 1);\n\n    assertEquals(logs.size(), 0);\n    try {\n      root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n      fail(\"Expected calculateLayout to throw\");\n    } catch (IllegalStateException e) {\n    }\n\n    assertEquals(logs.size(), 1);\n\n    config.setLogger(null);\n\n    try {\n      root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n      fail(\"Expected calculateLayout to throw again\");\n    } catch (IllegalStateException e) {\n    }\n\n    assertEquals(logs.size(), 1);\n  }\n\n  @Test\n  public void testLoggerLeak() throws Exception {\n    final YogaConfig config = YogaConfigFactory.create();\n    YogaLogger logger = new YogaLogger() {\n      @Override\n      public void log(YogaLogLevel level, String message) {\n      }\n    };\n    config.setLogger(logger);\n    config.setLogger(null);\n    WeakReference<Object> ref = new WeakReference<Object>(logger);\n    // noinspection UnusedAssignment\n    logger = null;\n    // try and free for the next 5 seconds, usually it works after the\n    // first GC attempt.\n    for (int i=0; i < 50; i++) {\n      System.gc();\n      if (ref.get() == null) {\n        // free successfully\n        return;\n      }\n      Thread.sleep(100);\n    }\n    fail(\"YogaLogger leaked\");\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\n\n@RunWith(Parameterized.class)\npublic class YogaNodeStylePropertiesTest {\n\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  private static final float UNDEFINED = YogaValue.UNDEFINED.value;\n\n  @Test\n  public void testDirectionDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(node.getStyleDirection(), YogaDirection.INHERIT);\n    assertEquals(node.getLayoutDirection(), YogaDirection.INHERIT);\n  }\n\n  @Test\n  public void testDirectionAssignment() {\n    final YogaNode node = createNode();\n    node.setDirection(YogaDirection.LTR);\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(YogaDirection.LTR, node.getStyleDirection());\n    assertEquals(YogaDirection.LTR, node.getLayoutDirection());\n  }\n\n  @Test\n  public void testDirectionAffectsLayout() {\n    final YogaNode node =\n        style().direction(YogaDirection.RTL).width(200).children(style().widthPercent(40)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(120, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testFlexDirectionDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaFlexDirection.COLUMN, node.getFlexDirection());\n  }\n\n  @Test\n  public void testFlexDirectionAssignment() {\n    final YogaNode node = style().flexDirection(YogaFlexDirection.COLUMN_REVERSE).node();\n\n    assertEquals(YogaFlexDirection.COLUMN_REVERSE, node.getFlexDirection());\n  }\n\n  @Test\n  public void testFlexDirectionAffectsLayout() {\n    final YogaNode node =\n        style()\n            .flexDirection(YogaFlexDirection.ROW_REVERSE)\n            .width(200)\n            .children(style().widthPercent(40))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(120, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testJustifyContentDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaJustify.FLEX_START, node.getJustifyContent());\n  }\n\n  @Test\n  public void testJustifyContentAssignment() {\n    final YogaNode node = createNode();\n    node.setJustifyContent(YogaJustify.SPACE_EVENLY);\n\n    assertEquals(YogaJustify.SPACE_EVENLY, node.getJustifyContent());\n  }\n\n  @Test\n  public void testJustifyContentAffectsLayout() {\n    final YogaNode node =\n        style()\n            .justifyContent(YogaJustify.CENTER)\n            .height(200)\n            .children(style().heightPercent(40))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(60, node.getChildAt(0).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testAlignItemsDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaAlign.STRETCH, node.getAlignItems());\n  }\n\n  @Test\n  public void testAlignItemsAssignment() {\n    final YogaNode node = createNode();\n    node.setAlignItems(YogaAlign.SPACE_AROUND);\n\n    assertEquals(YogaAlign.SPACE_AROUND, node.getAlignItems());\n  }\n\n  @Test\n  public void testAlignItemsAffectsLayout() {\n    final YogaNode node =\n        style().alignItems(YogaAlign.CENTER).height(200).children(style().widthPercent(40)).node();\n    node.calculateLayout(200, UNDEFINED);\n\n    assertEquals(60, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testAlignSelfDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaAlign.AUTO, node.getAlignSelf());\n  }\n\n  @Test\n  public void testAlignSelfAssignment() {\n    final YogaNode node = createNode();\n    node.setAlignSelf(YogaAlign.FLEX_END);\n\n    assertEquals(YogaAlign.FLEX_END, node.getAlignSelf());\n  }\n\n  @Test\n  public void testAlignSelfAffectsLayout() {\n    final YogaNode node =\n        style().height(200).children(style().alignSelf(YogaAlign.CENTER).widthPercent(40)).node();\n    node.calculateLayout(200, UNDEFINED);\n\n    assertEquals(60, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testAlignContentDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaAlign.FLEX_START, node.getAlignContent());\n  }\n\n  @Test\n  public void testAlignContentAssignment() {\n    final YogaNode node = createNode();\n    node.setAlignContent(YogaAlign.BASELINE);\n\n    assertEquals(YogaAlign.BASELINE, node.getAlignContent());\n  }\n\n  @Test\n  public void testAlignContentAffectsLayout() {\n    final YogaNode node =\n        style()\n            .alignContent(YogaAlign.SPACE_AROUND)\n            .flexWrap(YogaWrap.WRAP)\n            .height(200)\n            .width(200)\n            .children(\n                style().widthPercent(20).heightPercent(60),\n                style().widthPercent(20).heightPercent(60))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(30, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testPositionTypeDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaPositionType.RELATIVE, node.getPositionType());\n  }\n\n  @Test\n  public void testPositionTypeAssignment() {\n    final YogaNode node = createNode();\n    node.setPositionType(YogaPositionType.ABSOLUTE);\n\n    assertEquals(YogaPositionType.ABSOLUTE, node.getPositionType());\n  }\n\n  @Test\n  public void testPositionTypeAffectsLayout() {\n    final YogaNode node =\n        style()\n            .height(200)\n            .children(\n                style().height(100), style().height(100).positionType(YogaPositionType.ABSOLUTE))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(0, node.getChildAt(1).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testWrapAffectsLayout() {\n    final YogaNode node =\n        style()\n            .width(200)\n            .height(200)\n            .flexWrap(YogaWrap.WRAP_REVERSE)\n            .children(style().width(10).heightPercent(60), style().heightPercent(60))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(190, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testOverflowDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaOverflow.VISIBLE, node.getOverflow());\n  }\n\n  @Test\n  public void testOverflowAssignment() {\n    final YogaNode node = createNode();\n    node.setOverflow(YogaOverflow.SCROLL);\n\n    assertEquals(YogaOverflow.SCROLL, node.getOverflow());\n  }\n\n  // TODO add testOverflowAffectsLayout()\n\n  @Test\n  public void testDisplayDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaDisplay.FLEX, node.getDisplay());\n  }\n\n  @Test\n  public void testDisplayAssignment() {\n    final YogaNode node = createNode();\n    node.setDisplay(YogaDisplay.NONE);\n\n    assertEquals(YogaDisplay.NONE, node.getDisplay());\n  }\n\n  @Test\n  public void testDisplayAffectsLayout() {\n    final YogaNode node =\n        style().children(style().flexGrow(1).display(YogaDisplay.NONE), style().flexGrow(1)).node();\n    node.calculateLayout(200, 200);\n\n    assertEquals(200, node.getChildAt(1).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexAffectsLayoutGrowing() {\n    final YogaNode node = style().height(200).children(style().height(100).flex(1.25f)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(200, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexAffectsLayoutShrinking() {\n    final YogaNode node = style().height(200).children(style().height(300).flex(1.25f)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(200, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexGrowDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(0, node.getFlexGrow(), 0);\n  }\n\n  @Test\n  public void testFlexGrowAssignment() {\n    final YogaNode node = createNode();\n    node.setFlexGrow(2.5f);\n\n    assertEquals(2.5f, node.getFlexGrow(), 0);\n  }\n\n  @Test\n  public void testFlexGrowAffectsLayout() {\n    final YogaNode node =\n        style().height(200).children(style().height(50).flexGrow(1), style().height(50)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(150, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexShrinkDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(0, node.getFlexShrink(), 0);\n  }\n\n  @Test\n  public void testFlexShrinkAssignment() {\n    final YogaNode node = createNode();\n    node.setFlexShrink(2.5f);\n\n    assertEquals(2.5f, node.getFlexShrink(), 0);\n  }\n\n  @Test\n  public void testFlexShrinkAffectsLayout() {\n    final YogaNode node =\n        style().height(200).children(style().height(150).flexShrink(1), style().height(150)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(50, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexBasisDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.AUTO, node.getFlexBasis());\n  }\n\n  @Test\n  public void testFlexBasisAssignment() {\n    final YogaNode node = createNode();\n    node.setFlexBasis(50);\n    assertEquals(new YogaValue(50, YogaUnit.POINT), node.getFlexBasis());\n\n    node.setFlexBasisPercent(20);\n    assertEquals(new YogaValue(20, YogaUnit.PERCENT), node.getFlexBasis());\n\n    node.setFlexBasisAuto();\n    assertEquals(YogaValue.AUTO, node.getFlexBasis());\n  }\n\n  @Test\n  public void testFlexBasisAffectsLayout() {\n    final YogaNode node =\n        style()\n            .height(200)\n            .children(style().flexBasis(150).flexShrink(1), style().flexBasis(150).flexShrink(1))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(100, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testFlexBasisPercentAffectsLayout() {\n    final YogaNode node =\n        style()\n            .height(200)\n            .children(style().flexBasisPercent(60), style().flexBasisPercent(40))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(80, node.getChildAt(1).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testMarginDefault() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      assertEquals(YogaValue.UNDEFINED, node.getMargin(edge));\n    }\n  }\n\n  @Test\n  public void testMarginAssignment() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      node.setMargin(edge, 25);\n      assertEquals(new YogaValue(25, YogaUnit.POINT), node.getMargin(edge));\n\n      node.setMarginPercent(edge, 5);\n      assertEquals(new YogaValue(5, YogaUnit.PERCENT), node.getMargin(edge));\n\n      node.setMarginAuto(edge);\n      assertEquals(YogaValue.AUTO, node.getMargin(edge));\n    }\n  }\n\n  @Test\n  public void testNegativeMarginAssignment() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      node.setMargin(edge, -25);\n      assertEquals(new YogaValue(-25, YogaUnit.POINT), node.getMargin(edge));\n\n      node.setMarginPercent(edge, -5);\n      assertEquals(new YogaValue(-5, YogaUnit.PERCENT), node.getMargin(edge));\n\n      node.setMarginAuto(edge);\n      assertEquals(YogaValue.AUTO, node.getMargin(edge));\n    }\n  }\n\n  @Test\n  public void testMarginPointAffectsLayout() {\n    final YogaNode node = style().margin(YogaEdge.TOP, 42).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(42, node.getLayoutY(), 0);\n  }\n\n  @Test\n  public void testMarginPercentAffectsLayout() {\n    final YogaNode node =\n        style().height(200).children(style().flexGrow(1).marginPercent(YogaEdge.TOP, 20)).node();\n    node.calculateLayout(200, 200);\n\n    assertEquals(40, node.getChildAt(0).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testMarginAutoAffectsLayout() {\n    final YogaNode node =\n        style()\n            .width(200)\n            .flexDirection(YogaFlexDirection.ROW)\n            .children(style().marginAuto(YogaEdge.LEFT).marginAuto(YogaEdge.RIGHT).width(100))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(50, node.getChildAt(0).getLayoutX(), 0);\n  }\n\n  @Test\n  public void testPaddingDefault() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      assertEquals(YogaValue.UNDEFINED, node.getPadding(edge));\n    }\n  }\n\n  @Test\n  public void testPaddingAssignment() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      node.setPadding(edge, 25);\n      assertEquals(new YogaValue(25, YogaUnit.POINT), node.getPadding(edge));\n\n      node.setPaddingPercent(edge, 5);\n      assertEquals(new YogaValue(5, YogaUnit.PERCENT), node.getPadding(edge));\n    }\n  }\n\n  @Test\n  public void testPaddingPointAffectsLayout() {\n    final YogaNode node = style().padding(YogaEdge.TOP, 42).children(style()).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(42, node.getChildAt(0).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testPaddingPercentAffectsLayout() {\n    final YogaNode node =\n        style().height(200).paddingPercent(YogaEdge.TOP, 20).children(style().flexGrow(1)).node();\n    node.calculateLayout(200, 200);\n\n    assertEquals(40, node.getChildAt(0).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testBorderDefault() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      assertEquals(UNDEFINED, node.getBorder(edge), 0);\n    }\n  }\n\n  @Test\n  public void testBorderAssignment() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      node.setBorder(edge, 2.5f);\n      assertEquals(2.5f, node.getBorder(edge), 0);\n    }\n  }\n\n  @Test\n  public void testBorderAffectsLayout() {\n    final YogaNode node = style().border(YogaEdge.TOP, 42).children(style()).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(42, node.getChildAt(0).getLayoutY(), 0);\n  }\n\n  @Test\n  public void testPositionDefault() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      assertEquals(YogaValue.UNDEFINED, node.getPosition(edge));\n    }\n  }\n\n  @Test\n  public void testPositionAssignment() {\n    final YogaNode node = createNode();\n    for (YogaEdge edge : YogaEdge.values()) {\n      node.setPosition(edge, 25);\n      assertEquals(new YogaValue(25, YogaUnit.POINT), node.getPosition(edge));\n\n      node.setPositionPercent(edge, 5);\n      assertEquals(new YogaValue(5, YogaUnit.PERCENT), node.getPosition(edge));\n    }\n  }\n\n  @Test\n  public void testPositionAffectsLayout() {\n    final YogaNode node =\n        style()\n            .height(100)\n            .children(\n                style()\n                    .positionType(YogaPositionType.ABSOLUTE)\n                    .position(YogaEdge.TOP, 11)\n                    .position(YogaEdge.BOTTOM, 22))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(67, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testPositionPercentAffectsLayout() {\n    final YogaNode node =\n        style()\n            .width(100)\n            .children(\n                style()\n                    .positionType(YogaPositionType.ABSOLUTE)\n                    .positionPercent(YogaEdge.LEFT, 11)\n                    .positionPercent(YogaEdge.RIGHT, 22))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(67, node.getChildAt(0).getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testWidthDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.AUTO, node.getWidth());\n  }\n\n  @Test\n  public void testWidthAssignment() {\n    final YogaNode node = createNode();\n    node.setWidth(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getWidth());\n\n    node.setWidthPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getWidth());\n  }\n\n  @Test\n  public void testWidthAffectsLayout() {\n    final YogaNode node = style().width(123).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testWidthPercentAffectsLayout() {\n    final YogaNode node = style().widthPercent(75).node();\n    node.calculateLayout(200, UNDEFINED);\n\n    assertEquals(150, node.getLayoutWidth(), 0);\n  }\n\n  // TODO: testWidthAutoAffectsLayout\n\n  @Test\n  public void testHeightDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.AUTO, node.getHeight());\n  }\n\n  @Test\n  public void testHeightAssignment() {\n    final YogaNode node = createNode();\n    node.setHeight(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getHeight());\n\n    node.setHeightPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getHeight());\n  }\n\n  @Test\n  public void testHeightAffectsLayout() {\n    final YogaNode node = style().height(123).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testHeightPercentAffectsLayout() {\n    final YogaNode node = style().heightPercent(75).node();\n    node.calculateLayout(UNDEFINED, 200);\n\n    assertEquals(150, node.getLayoutHeight(), 0);\n  }\n\n  // TODO: testHeightAutoAffectsLayout\n\n  @Test\n  public void testMinWidthDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.UNDEFINED, node.getMinWidth());\n  }\n\n  @Test\n  public void testMinWidthAssignment() {\n    final YogaNode node = createNode();\n    node.setMinWidth(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getMinWidth());\n\n    node.setMinWidthPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getMinWidth());\n  }\n\n  @Test\n  public void testMinWidthAffectsLayout() {\n    final YogaNode node = style().minWidth(123).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testMinWidthPercentAffectsLayout() {\n    final YogaNode node = style().minWidthPercent(120).node();\n    node.calculateLayout(200, UNDEFINED);\n\n    assertEquals(240, node.getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testMinHeightDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.UNDEFINED, node.getMinHeight());\n  }\n\n  @Test\n  public void testMinHeightAssignment() {\n    final YogaNode node = createNode();\n    node.setMinHeight(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getMinHeight());\n\n    node.setMinHeightPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getMinHeight());\n  }\n\n  @Test\n  public void testMinHeightAffectsLayout() {\n    final YogaNode node = style().minHeight(123).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testMinHeightPercentAffectsLayout() {\n    final YogaNode node = style().minHeightPercent(120).node();\n    node.calculateLayout(UNDEFINED, 200);\n\n    assertEquals(240, node.getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testMaxWidthDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.UNDEFINED, node.getMaxWidth());\n  }\n\n  @Test\n  public void testMaxWidthAssignment() {\n    final YogaNode node = createNode();\n    node.setMaxWidth(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getMaxWidth());\n\n    node.setMaxWidthPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getMaxWidth());\n  }\n\n  @Test\n  public void testMaxWidthAffectsLayout() {\n    final YogaNode node = style().width(200).children(style().maxWidth(123)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getChildAt(0).getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testMaxWidthPercentAffectsLayout() {\n    final YogaNode node = style().width(200).children(style().maxWidthPercent(80)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(160, node.getChildAt(0).getLayoutWidth(), 0);\n  }\n\n  @Test\n  public void testMaxHeightDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(YogaValue.UNDEFINED, node.getMaxHeight());\n  }\n\n  @Test\n  public void testMaxHeightAssignment() {\n    final YogaNode node = createNode();\n    node.setMaxHeight(123);\n    assertEquals(new YogaValue(123, YogaUnit.POINT), node.getMaxHeight());\n\n    node.setMaxHeightPercent(45);\n    assertEquals(new YogaValue(45, YogaUnit.PERCENT), node.getMaxHeight());\n  }\n\n  @Test\n  public void testMaxHeightAffectsLayout() {\n    final YogaNode node =\n        style()\n            .height(200)\n            .flexDirection(YogaFlexDirection.ROW)\n            .children(style().maxHeight(123))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(123, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testMaxHeightPercentAffectsLayout() {\n    final YogaNode node =\n        style()\n            .flexDirection(YogaFlexDirection.ROW)\n            .height(200)\n            .children(style().maxHeightPercent(80))\n            .node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(160, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void testAspectRatioDefault() {\n    final YogaNode node = createNode();\n\n    assertEquals(UNDEFINED, node.getAspectRatio(), 0);\n  }\n\n  @Test\n  public void testAspectRatioAssignment() {\n    final YogaNode node = createNode();\n    node.setAspectRatio(2.75f);\n\n    assertEquals(2.75f, node.getAspectRatio(), 0);\n  }\n\n  @Test\n  public void aspectRatioAffectsLayoutWithGivenWidth() {\n    final YogaNode node = style().children(style().width(300).aspectRatio(1.5f)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(200, node.getChildAt(0).getLayoutHeight(), 0);\n  }\n\n  @Test\n  public void aspectRatioAffectsLayoutWithGivenHeight() {\n    final YogaNode node = style().children(style().height(300).aspectRatio(1.5f)).node();\n    node.calculateLayout(UNDEFINED, UNDEFINED);\n\n    assertEquals(450, node.getChildAt(0).getLayoutWidth(), 0);\n  }\n\n  private YogaNode createNode() {\n    return mNodeFactory.create();\n  }\n\n  private StyledNode style() {\n    return new StyledNode(mNodeFactory);\n  }\n\n  private static class StyledNode {\n\n    private YogaNode mNode;\n\n    public StyledNode(TestParametrization.NodeFactory nodeFactory) {\n      mNode = nodeFactory.create();\n    }\n\n    YogaNode node() {\n      return mNode;\n    }\n\n    StyledNode children(StyledNode... children) {\n      for (int i = mNode.getChildCount(); --i >= 0; ) {\n        mNode.removeChildAt(i);\n      }\n      for (int i = 0; i < children.length; i++) {\n        mNode.addChildAt(children[i].node(), i);\n      }\n      return this;\n    }\n\n    StyledNode direction(YogaDirection direction) {\n      mNode.setDirection(direction);\n      return this;\n    }\n\n    StyledNode width(float width) {\n      mNode.setWidth(width);\n      return this;\n    }\n\n    StyledNode widthPercent(float width) {\n      mNode.setWidthPercent(width);\n      return this;\n    }\n\n    StyledNode flexDirection(YogaFlexDirection direction) {\n      mNode.setFlexDirection(direction);\n      return this;\n    }\n\n    StyledNode justifyContent(YogaJustify justify) {\n      mNode.setJustifyContent(justify);\n      return this;\n    }\n\n    StyledNode height(float height) {\n      mNode.setHeight(height);\n      return this;\n    }\n\n    StyledNode heightPercent(float height) {\n      mNode.setHeightPercent(height);\n      return this;\n    }\n\n    StyledNode alignItems(YogaAlign align) {\n      mNode.setAlignItems(align);\n      return this;\n    }\n\n    StyledNode alignSelf(YogaAlign align) {\n      mNode.setAlignSelf(align);\n      return this;\n    }\n\n    StyledNode alignContent(YogaAlign align) {\n      mNode.setAlignContent(align);\n      return this;\n    }\n\n    StyledNode flexWrap(YogaWrap wrap) {\n      mNode.setWrap(wrap);\n      return this;\n    }\n\n    StyledNode positionType(YogaPositionType positionType) {\n      mNode.setPositionType(positionType);\n      return this;\n    }\n\n    StyledNode overflow(YogaOverflow overflow) {\n      mNode.setOverflow(overflow);\n      return this;\n    }\n\n    StyledNode flexShrink(float flexShrink) {\n      mNode.setFlexShrink(flexShrink);\n      return this;\n    }\n\n    StyledNode display(YogaDisplay display) {\n      mNode.setDisplay(display);\n      return this;\n    }\n\n    StyledNode flexGrow(float flexGrow) {\n      mNode.setFlexGrow(flexGrow);\n      return this;\n    }\n\n    StyledNode flex(float flex) {\n      mNode.setFlex(flex);\n      return this;\n    }\n\n    StyledNode flexBasis(float flexBasis) {\n      mNode.setFlexBasis(flexBasis);\n      return this;\n    }\n\n    StyledNode flexBasisPercent(float flexBasis) {\n      mNode.setFlexBasisPercent(flexBasis);\n      return this;\n    }\n\n    StyledNode margin(YogaEdge edge, float margin) {\n      mNode.setMargin(edge, margin);\n      return this;\n    }\n\n    StyledNode marginPercent(YogaEdge edge, float margin) {\n      mNode.setMarginPercent(edge, margin);\n      return this;\n    }\n\n    StyledNode marginAuto(YogaEdge edge) {\n      mNode.setMarginAuto(edge);\n      return this;\n    }\n\n    StyledNode padding(YogaEdge edge, float padding) {\n      mNode.setPadding(edge, padding);\n      return this;\n    }\n\n    StyledNode paddingPercent(YogaEdge edge, float padding) {\n      mNode.setPaddingPercent(edge, padding);\n      return this;\n    }\n\n    StyledNode border(YogaEdge edge, float border) {\n      mNode.setBorder(edge, border);\n      return this;\n    }\n\n    StyledNode position(YogaEdge edge, float position) {\n      mNode.setPosition(edge, position);\n      return this;\n    }\n\n    StyledNode positionPercent(YogaEdge edge, float position) {\n      mNode.setPositionPercent(edge, position);\n      return this;\n    }\n\n    StyledNode minWidth(float minWidth) {\n      mNode.setMinWidth(minWidth);\n      return this;\n    }\n\n    StyledNode minWidthPercent(float minWidth) {\n      mNode.setMinWidthPercent(minWidth);\n      return this;\n    }\n\n    StyledNode minHeight(float minHeight) {\n      mNode.setMinHeight(minHeight);\n      return this;\n    }\n\n    StyledNode minHeightPercent(float minHeight) {\n      mNode.setMinHeightPercent(minHeight);\n      return this;\n    }\n\n    StyledNode maxWidth(float maxWidth) {\n      mNode.setMaxWidth(maxWidth);\n      return this;\n    }\n\n    StyledNode maxWidthPercent(float maxWidth) {\n      mNode.setMaxWidthPercent(maxWidth);\n      return this;\n    }\n\n    StyledNode maxHeight(float maxHeight) {\n      mNode.setMaxHeight(maxHeight);\n      return this;\n    }\n\n    StyledNode maxHeightPercent(float maxHeight) {\n      mNode.setMaxHeightPercent(maxHeight);\n      return this;\n    }\n\n    StyledNode aspectRatio(float aspectRatio) {\n      mNode.setAspectRatio(aspectRatio);\n      return this;\n    }\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YogaNodeTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertFalse;\nimport static org.junit.Assert.assertNotSame;\nimport static org.junit.Assert.assertNull;\nimport static org.junit.Assert.assertTrue;\nimport static org.junit.Assert.fail;\n\nimport java.lang.ref.WeakReference;\nimport java.util.ArrayList;\nimport java.util.concurrent.atomic.AtomicBoolean;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\n\n@RunWith(Parameterized.class)\npublic class YogaNodeTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void testInit() {\n    final YogaNode node = createNode();\n  }\n\n  @Test\n  public void testBaseline() {\n    final YogaNode root = createNode();\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n    root.setWidth(100);\n    root.setHeight(100);\n\n    final YogaNode child1 = createNode();\n    child1.setWidth(40);\n    child1.setHeight(40);\n    root.addChildAt(child1, 0);\n\n    final YogaNode child2 = createNode();\n    child2.setWidth(40);\n    child2.setHeight(40);\n    child2.setBaselineFunction(new YogaBaselineFunction() {\n        public float baseline(YogaNode node, float width, float height) {\n          return 0;\n        }\n    });\n    root.addChildAt(child2, 1);\n\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0, (int) child1.getLayoutY());\n    assertEquals(40, (int) child2.getLayoutY());\n  }\n\n  @Test\n  public void testMeasure() {\n    final YogaNode node = createNode();\n    node.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          return YogaMeasureOutput.make(100, 100);\n        }\n    });\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertEquals(100, (int) node.getLayoutWidth());\n    assertEquals(100, (int) node.getLayoutHeight());\n  }\n\n  @Test\n  public void testMeasureFloat() {\n    final YogaNode node = createNode();\n    node.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          return YogaMeasureOutput.make(100.5f, 100.5f);\n        }\n    });\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertEquals(101f, node.getLayoutWidth(), 0.01f);\n    assertEquals(101f, node.getLayoutHeight(), 0.01f);\n  }\n\n  @Test\n  public void testMeasureFloatMin() {\n    final YogaNode node = createNode();\n    node.setMeasureFunction(new YogaMeasureFunction() {\n        public long measure(\n            YogaNode node,\n            float width,\n            YogaMeasureMode widthMode,\n            float height,\n            YogaMeasureMode heightMode) {\n          return YogaMeasureOutput.make(Float.MIN_VALUE, Float.MIN_VALUE);\n        }\n    });\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertEquals(Float.MIN_VALUE, node.getLayoutWidth(), 0.01f);\n    assertEquals(Float.MIN_VALUE, node.getLayoutHeight(), 0.01f);\n  }\n\n  @Test\n  public void testMeasureFloatBigNumber() {\n    final YogaNode node = createNode();\n    final float bigNumber = (float) 10E5;\n    node.setMeasureFunction(\n        new YogaMeasureFunction() {\n          public long measure(\n              YogaNode node,\n              float width,\n              YogaMeasureMode widthMode,\n              float height,\n              YogaMeasureMode heightMode) {\n            return YogaMeasureOutput.make(bigNumber, bigNumber);\n          }\n        });\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertEquals(bigNumber, node.getLayoutWidth(), 0.01f);\n    assertEquals(bigNumber, node.getLayoutHeight(), 0.01f);\n  }\n\n  @Test\n  public void testCopyStyle() {\n    final YogaNode node0 = createNode();\n    assertTrue(YogaConstants.isUndefined(node0.getMaxHeight()));\n\n    final YogaNode node1 = createNode();\n    node1.setMaxHeight(100);\n\n    node0.copyStyle(node1);\n    assertEquals(100, (int) node0.getMaxHeight().value);\n  }\n\n  @Test\n  public void testLayoutMargin() {\n    final YogaNode node = createNode();\n    node.setWidth(100);\n    node.setHeight(100);\n    node.setMargin(YogaEdge.START, 1);\n    node.setMargin(YogaEdge.END, 2);\n    node.setMargin(YogaEdge.TOP, 3);\n    node.setMargin(YogaEdge.BOTTOM, 4);\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(1, (int) node.getLayoutMargin(YogaEdge.LEFT));\n    assertEquals(2, (int) node.getLayoutMargin(YogaEdge.RIGHT));\n    assertEquals(3, (int) node.getLayoutMargin(YogaEdge.TOP));\n    assertEquals(4, (int) node.getLayoutMargin(YogaEdge.BOTTOM));\n  }\n\n  @Test\n  public void testLayoutPadding() {\n    final YogaNode node = createNode();\n    node.setWidth(100);\n    node.setHeight(100);\n    node.setPadding(YogaEdge.START, 1);\n    node.setPadding(YogaEdge.END, 2);\n    node.setPadding(YogaEdge.TOP, 3);\n    node.setPadding(YogaEdge.BOTTOM, 4);\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(1, (int) node.getLayoutPadding(YogaEdge.LEFT));\n    assertEquals(2, (int) node.getLayoutPadding(YogaEdge.RIGHT));\n    assertEquals(3, (int) node.getLayoutPadding(YogaEdge.TOP));\n    assertEquals(4, (int) node.getLayoutPadding(YogaEdge.BOTTOM));\n  }\n\n  @Test\n  public void testLayoutBorder() {\n    final YogaNode node = createNode();\n    node.setWidth(100);\n    node.setHeight(100);\n    node.setBorder(YogaEdge.START, 1);\n    node.setBorder(YogaEdge.END, 2);\n    node.setBorder(YogaEdge.TOP, 3);\n    node.setBorder(YogaEdge.BOTTOM, 4);\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(1, (int) node.getLayoutBorder(YogaEdge.LEFT));\n    assertEquals(2, (int) node.getLayoutBorder(YogaEdge.RIGHT));\n    assertEquals(3, (int) node.getLayoutBorder(YogaEdge.TOP));\n    assertEquals(4, (int) node.getLayoutBorder(YogaEdge.BOTTOM));\n  }\n\n  @Test\n  public void testUseWebDefaults() {\n    final YogaConfig config = YogaConfigFactory.create();\n    config.setUseWebDefaults(true);\n    final YogaNode node = createNode(config);\n    assertEquals(YogaFlexDirection.ROW, node.getFlexDirection());\n  }\n\n  @Test\n  public void testPercentPaddingOnRoot() {\n    final YogaNode node = createNode();\n    node.setPaddingPercent(YogaEdge.ALL, 10);\n    node.calculateLayout(50, 50);\n\n    assertEquals(5, (int) node.getLayoutPadding(YogaEdge.LEFT));\n    assertEquals(5, (int) node.getLayoutPadding(YogaEdge.RIGHT));\n    assertEquals(5, (int) node.getLayoutPadding(YogaEdge.TOP));\n    assertEquals(5, (int) node.getLayoutPadding(YogaEdge.BOTTOM));\n  }\n\n  @Test\n  public void testDefaultEdgeValues() {\n    final YogaNode node = createNode();\n\n    for (YogaEdge edge : YogaEdge.values()) {\n      assertEquals(YogaUnit.UNDEFINED, node.getMargin(edge).unit);\n      assertEquals(YogaUnit.UNDEFINED, node.getPadding(edge).unit);\n      assertEquals(YogaUnit.UNDEFINED, node.getPosition(edge).unit);\n      assertTrue(YogaConstants.isUndefined(node.getBorder(edge)));\n    }\n  }\n\n  @Test\n  public void initiallyHasNewLayout() {\n    YogaNode root = createNode();\n    assertTrue(root.hasNewLayout());\n  }\n\n  @Test\n  public void initialLayoutCanBeMarkedSeen() {\n    YogaNode root = createNode();\n    root.markLayoutSeen();\n    assertFalse(root.hasNewLayout());\n  }\n\n  @Test\n  public void calculatingLayoutMarksLayoutAsUnseen() {\n    YogaNode root = createNode();\n    root.markLayoutSeen();\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertTrue(root.hasNewLayout());\n  }\n\n  @Test\n  public void calculatedLayoutCanBeMarkedSeen() {\n    YogaNode root = createNode();\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    root.markLayoutSeen();\n    assertFalse(root.hasNewLayout());\n  }\n\n  @Test\n  public void recalculatingLayoutDoesMarkAsUnseen() {\n    YogaNode root = createNode();\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    root.markLayoutSeen();\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    assertTrue(root.hasNewLayout());\n  }\n\n  @Test\n  public void resetAlsoResetsLayoutSeen() {\n    YogaNode root = createNode();\n    root.markLayoutSeen();\n    root.reset();\n    assertTrue(root.hasNewLayout());\n  }\n\n  @Test\n  public void directionIsPassedThrough() {\n    YogaNode root = createNode();\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(root.getLayoutDirection(), YogaDirection.RTL);\n  }\n\n  @Test\n  public void testResetApiShouldResetAllLayoutOutputs() {\n    YogaConfig config = YogaConfigFactory.create();\n    config.setErrata(YogaErrata.STRETCH_FLEX_BASIS);\n    YogaNode node = createNode(config);\n    node.setWidth(100);\n    node.setHeight(100);\n    node.setMargin(YogaEdge.START, 1);\n    node.setMargin(YogaEdge.END, 2);\n    node.setMargin(YogaEdge.TOP, 3);\n    node.setMargin(YogaEdge.BOTTOM, 4);\n    node.setPadding(YogaEdge.START, 1);\n    node.setPadding(YogaEdge.END, 2);\n    node.setPadding(YogaEdge.TOP, 3);\n    node.setPadding(YogaEdge.BOTTOM, 4);\n    node.setBorder(YogaEdge.START, 1);\n    node.setBorder(YogaEdge.END, 2);\n    node.setBorder(YogaEdge.TOP, 3);\n    node.setBorder(YogaEdge.BOTTOM, 4);\n    node.setDirection(YogaDirection.RTL);\n    node.markLayoutSeen();\n    node.setMeasureFunction(new YogaMeasureFunction(){\n      @Override\n      public long measure(YogaNode node, float width, YogaMeasureMode widthMode, float height,\n          YogaMeasureMode heightMode) {\n        return YogaMeasureOutput.make(100, 100);\n      }\n    });\n    node.setBaselineFunction(new YogaBaselineFunction(){\n\n      @Override\n      public float baseline(YogaNode node, float width, float height) {\n        return height;\n      }\n    });\n    node.setData(new ArrayList<>());\n\n    node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n    node.reset();\n\n    assertEquals(0, (int) node.getLayoutHeight());\n    assertEquals(0, (int) node.getLayoutWidth());\n    assertEquals(0, (int) node.getLayoutMargin(YogaEdge.LEFT));\n    assertEquals(0, (int) node.getLayoutMargin(YogaEdge.RIGHT));\n    assertEquals(0, (int) node.getLayoutMargin(YogaEdge.TOP));\n    assertEquals(0, (int) node.getLayoutMargin(YogaEdge.BOTTOM));\n    assertEquals(0, (int) node.getLayoutPadding(YogaEdge.LEFT));\n    assertEquals(0, (int) node.getLayoutPadding(YogaEdge.RIGHT));\n    assertEquals(0, (int) node.getLayoutPadding(YogaEdge.TOP));\n    assertEquals(0, (int) node.getLayoutPadding(YogaEdge.BOTTOM));\n    assertEquals(0, (int) node.getLayoutBorder(YogaEdge.LEFT));\n    assertEquals(0, (int) node.getLayoutBorder(YogaEdge.RIGHT));\n    assertEquals(0, (int) node.getLayoutBorder(YogaEdge.TOP));\n    assertEquals(0, (int) node.getLayoutBorder(YogaEdge.BOTTOM));\n    assertEquals(node.getLayoutDirection(), YogaDirection.INHERIT);\n    assertTrue(node.hasNewLayout());\n    assertFalse(node.isMeasureDefined());\n    assertFalse(node.isBaselineDefined());\n    assertEquals(null, node.getData());\n  }\n\n  private YogaNode createNode() {\n    return mNodeFactory.create();\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/YogaValueTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.assertEquals;\n\npublic class YogaValueTest {\n\n  @Test\n  public void testEquals() {\n    assertEquals(new YogaValue(0, YogaUnit.UNDEFINED), new YogaValue(0, YogaUnit.UNDEFINED));\n    assertEquals(new YogaValue(0, YogaUnit.POINT), new YogaValue(0, YogaUnit.POINT));\n    assertEquals(new YogaValue(0, YogaUnit.PERCENT), new YogaValue(0, YogaUnit.PERCENT));\n    assertEquals(new YogaValue(0, YogaUnit.UNDEFINED), new YogaValue(1, YogaUnit.UNDEFINED));\n    assertEquals(new YogaValue(Float.NaN, YogaUnit.POINT), new YogaValue(Float.NaN, YogaUnit.POINT));\n  }\n}\n"
  },
  {
    "path": "java/tests/com/facebook/yoga/utils/TestUtils.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.yoga.utils;\n\nimport com.facebook.yoga.YogaMeasureMode;\nimport com.facebook.yoga.YogaMeasureOutput;\nimport com.facebook.yoga.YogaMeasureFunction;\nimport com.facebook.yoga.YogaNode;\nimport com.facebook.yoga.YogaFlexDirection;\n\npublic class TestUtils {\n\n  public static class intrinsicMeasureFunction implements YogaMeasureFunction {\n\n    private static float widthPerChar = 10;\n    private static float heightPerChar = 10;\n\n    @Override\n    public long measure(\n        YogaNode node,\n        float width,\n        YogaMeasureMode widthMode,\n        float height,\n        YogaMeasureMode heightMode) {\n      String text = (String) node.getData();\n      float measuredWidth;\n      float measuredHeight;\n\n      if (widthMode == YogaMeasureMode.EXACTLY) {\n        measuredWidth = width;\n      } else if (widthMode == YogaMeasureMode.AT_MOST) {\n        measuredWidth = Math.min(text.length() * widthPerChar, width);\n      } else {\n        measuredWidth = text.length() * widthPerChar;\n      }\n\n      if (heightMode == YogaMeasureMode.EXACTLY) {\n        measuredHeight = height;\n      } else if (heightMode == YogaMeasureMode.AT_MOST) {\n        measuredHeight =\n            Math.min(\n                caclulateHeight(text, node.getFlexDirection() == YogaFlexDirection.COLUMN \n                  ? measuredWidth \n                  : Math.max(measuredWidth, getWidestWordWidth(text))), height);\n      } else {\n        measuredHeight = caclulateHeight(text, node.getFlexDirection() == YogaFlexDirection.COLUMN \n          ? measuredWidth \n          : Math.max(measuredWidth, getWidestWordWidth(text)));\n      }\n\n      return YogaMeasureOutput.make(measuredWidth, measuredHeight);\n    }\n\n    static float getWidestWordWidth(String text) {\n      int widestWordLength = 0;\n      String[] words = text.split(\" \");\n      for (String word : words) {\n        int wordLength = word.length();\n        if (widestWordLength < wordLength) {\n          widestWordLength = wordLength;\n        }\n      }\n      return (float) widestWordLength * widthPerChar;\n    }\n\n    static float caclulateHeight(String text, float measuredWidth) {\n      if (text.length() * widthPerChar <= measuredWidth) {\n        return heightPerChar;\n      }\n\n      String[] words = text.split(\" \");\n      float lines = 1;\n      float currentLineLength = 0;\n      for (String word : words) {\n        float wordWidth = word.length() * widthPerChar;\n        if (wordWidth > measuredWidth) {\n          if (currentLineLength > 0) {\n            lines++;\n          }\n          lines++;\n          currentLineLength = 0;\n        } else if (currentLineLength + wordWidth <= measuredWidth) {\n          currentLineLength += wordWidth + widthPerChar;\n        } else {\n          lines++;\n          currentLineLength = wordWidth + widthPerChar;\n        }\n      }\n      return (currentLineLength == 0 ? lines - 1 : lines) * heightPerChar;\n    }\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAbsolutePositionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<bb931eec168913945a41786c6d25f337>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAbsolutePositionTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAbsolutePositionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_absolute_layout_width_height_start_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.START, 10f);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_width_height_left_auto_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPositionAuto(YogaEdge.LEFT);\n    root_child0.setPosition(YogaEdge.RIGHT, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_width_height_left_right_auto() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.LEFT, 10f);\n    root_child0.setPositionAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_width_height_left_auto_right_auto() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPositionAuto(YogaEdge.LEFT);\n    root_child0.setPositionAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_width_height_end_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.END, 10f);\n    root_child0.setPosition(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_start_top_end_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.START, 10f);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root_child0.setPosition(YogaEdge.END, 10f);\n    root_child0.setPosition(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_width_height_start_top_end_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.START, 10f);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root_child0.setPosition(YogaEdge.END, 10f);\n    root_child0.setPosition(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(50f);\n    root.setWidth(50f);\n    root.setOverflow(YogaOverflow.HIDDEN);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPosition(YogaEdge.START, 0f);\n    root_child0.setPosition(YogaEdge.TOP, 0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setHeight(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_within_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setMargin(YogaEdge.ALL, 10f);\n    root.setPadding(YogaEdge.ALL, 10);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setPosition(YogaEdge.LEFT, 0f);\n    root_child0.setPosition(YogaEdge.TOP, 0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root_child1.setPosition(YogaEdge.RIGHT, 0f);\n    root_child1.setPosition(YogaEdge.BOTTOM, 0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root_child2.setPosition(YogaEdge.LEFT, 0f);\n    root_child2.setPosition(YogaEdge.TOP, 0f);\n    root_child2.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(50f);\n    root_child3.setPosition(YogaEdge.RIGHT, 0f);\n    root_child3.setPosition(YogaEdge.BOTTOM, 0f);\n    root_child3.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.FLEX_END);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_justify_content_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_center_on_child_only() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root_child0.setAlignSelf(YogaAlign.CENTER);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_center_and_top_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_center_and_bottom_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root_child0.setPosition(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_center_and_left_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root_child0.setPosition(YogaEdge.LEFT, 5f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_align_items_and_justify_content_center_and_right_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(110f);\n    root.setFlexGrow(1f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(40f);\n    root_child0.setPosition(YogaEdge.RIGHT, 5f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_position_root_with_rtl_should_position_withoutdirection() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setPosition(YogaEdge.LEFT, 72f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(72f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(72f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_percentage_bottom_based_on_parent_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPositionPercent(YogaEdge.TOP, 50f);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child1.setPositionPercent(YogaEdge.BOTTOM, 50f);\n    root_child1.setWidth(10f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child2.setPositionPercent(YogaEdge.TOP, 10f);\n    root_child2.setWidth(10f);\n    root_child2.setPositionPercent(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_in_wrap_reverse_column_container() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_in_wrap_reverse_row_container() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_in_wrap_reverse_column_container_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_in_wrap_reverse_row_container_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_absolute_position_infinite_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(300f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidthPercent(20f);\n    root_child1.setHeightPercent(20f);\n    root_child1.setPositionPercent(YogaEdge.LEFT, 20f);\n    root_child1.setPositionPercent(YogaEdge.TOP, 20f);\n    root_child1.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_percentage_height_based_on_padded_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.TOP, 10);\n    root.setBorder(YogaEdge.TOP, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeightPercent(50f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_percentage_height_based_on_padded_parent_and_align_items_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.TOP, 20);\n    root.setPadding(YogaEdge.BOTTOM, 20);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(100f);\n    root_child0.setHeightPercent(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_padding_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setPadding(YogaEdge.LEFT, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_padding_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setPadding(YogaEdge.RIGHT, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_padding_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setPadding(YogaEdge.TOP, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_padding_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setPadding(YogaEdge.BOTTOM, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setPadding(YogaEdge.ALL, 50);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(220f, root.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(220f, root.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setBorder(YogaEdge.ALL, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(220f, root.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(220f, root.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_absolute_layout_column_reverse_margin_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setPosition(YogaEdge.LEFT, 5f);\n    root_child0.setPosition(YogaEdge.RIGHT, 3f);\n    root_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0.setMargin(YogaEdge.LEFT, 3f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.LEFT, 1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(8f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(143f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAlignContentTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<ccfa176bdf793a64d9c9299e549683a8>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignContentTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAlignContentTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_align_content_flex_start_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_without_height_on_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_with_flex() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setFlexGrow(1f);\n    root_child3.setFlexShrink(1f);\n    root_child3.setFlexBasisPercent(0f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_end_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_end_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_end_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_end_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.FLEX_END);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_end_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.FLEX_END);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-70f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-40f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-70f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-40f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_center_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_center_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_center_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_center_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.CENTER);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-25f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-5f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-25f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-5f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_center_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.CENTER);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-35f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-5f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-35f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(-5f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_BETWEEN);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_wrapped_negative_space_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_BETWEEN);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_between_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_BETWEEN);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(95f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(95f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_AROUND);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_wrapped_negative_space_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_AROUND);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_AROUND);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_nowrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root_child4.setHeight(10f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(23f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(23f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(88f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(23f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(23f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(88f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_wrap_singleline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(140f);\n    root.setHeight(120f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_wrapped_negative_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_EVENLY);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_wrapped_negative_space_gap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setHeight(320f);\n    root.setBorder(YogaEdge.ALL, 60f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setAlignContent(YogaAlign.SPACE_EVENLY);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.setHeight(10f);\n    root_child0.setGap(YogaGutter.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(80f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(80f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidthPercent(80f);\n    root_child0_child2.setHeight(20f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_flex() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setFlexGrow(1f);\n    root_child3.setFlexShrink(1f);\n    root_child3.setFlexBasisPercent(0f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_flex_no_shrink() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setFlexGrow(1f);\n    root_child3.setFlexBasisPercent(0f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_single_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_fixed_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(60f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setMaxHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_row_with_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setMinHeight(80f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(150f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(50f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(50f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_is_not_overriding_align_items() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setAlignItems(YogaAlign.CENTER);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setAlignContent(YogaAlign.STRETCH);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_with_min_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMinHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_with_max_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_with_max_cross_axis_and_border_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n    root.setBorder(YogaEdge.ALL, 5f);\n    root.setPadding(YogaEdge.ALL, 2);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(414f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(7f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(7f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(7f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(207f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(414f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(93f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(7f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(93f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(207f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_with_min_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMinHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(33f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(267f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(33f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(267f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_with_max_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_with_max_cross_axis_violated() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_with_max_cross_axis_violated_padding_and_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_EVENLY);\n    root.setBorder(YogaEdge.ALL, 5f);\n    root.setPadding(YogaEdge.ALL, 2);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(7f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(7f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(7f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(207f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(93f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(7f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(93f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(207f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_and_align_items_flex_end_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(88f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(88f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_and_align_items_center_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(63f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(63f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_around_and_align_items_flex_start_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_flex_start_stretch_doesnt_influence_line_box_dim() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setPadding(YogaEdge.TOP, 20);\n    root.setPadding(YogaEdge.BOTTOM, 20);\n    root.setPadding(YogaEdge.LEFT, 20);\n    root.setPadding(YogaEdge.RIGHT, 20);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(30f);\n    root_child1_child0.setWidth(30f);\n    root_child1_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setHeight(30f);\n    root_child1_child1.setWidth(30f);\n    root_child1_child1.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setHeight(30f);\n    root_child1_child2.setWidth(30f);\n    root_child1_child2.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setHeight(30f);\n    root_child1_child3.setWidth(30f);\n    root_child1_child3.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child3, 3);\n\n    final YogaNode root_child1_child4 = createNode(config);\n    root_child1_child4.setHeight(30f);\n    root_child1_child4.setWidth(30f);\n    root_child1_child4.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child4, 4);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(50f);\n    root_child2.setMargin(YogaEdge.LEFT, 20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(330f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(260f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_stretch_does_influence_line_box_dim() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setPadding(YogaEdge.TOP, 20);\n    root.setPadding(YogaEdge.BOTTOM, 20);\n    root.setPadding(YogaEdge.LEFT, 20);\n    root.setPadding(YogaEdge.RIGHT, 20);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setAlignContent(YogaAlign.STRETCH);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(30f);\n    root_child1_child0.setWidth(30f);\n    root_child1_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setHeight(30f);\n    root_child1_child1.setWidth(30f);\n    root_child1_child1.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setHeight(30f);\n    root_child1_child2.setWidth(30f);\n    root_child1_child2.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setHeight(30f);\n    root_child1_child3.setWidth(30f);\n    root_child1_child3.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child3, 3);\n\n    final YogaNode root_child1_child4 = createNode(config);\n    root_child1_child4.setHeight(30f);\n    root_child1_child4.setWidth(30f);\n    root_child1_child4.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child4, 4);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(50f);\n    root_child2.setMargin(YogaEdge.LEFT, 20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(330f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(260f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_space_evenly_stretch_does_influence_line_box_dim() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setPadding(YogaEdge.TOP, 20);\n    root.setPadding(YogaEdge.BOTTOM, 20);\n    root.setPadding(YogaEdge.LEFT, 20);\n    root.setPadding(YogaEdge.RIGHT, 20);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setAlignContent(YogaAlign.STRETCH);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(30f);\n    root_child1_child0.setWidth(30f);\n    root_child1_child0.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setHeight(30f);\n    root_child1_child1.setWidth(30f);\n    root_child1_child1.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setHeight(30f);\n    root_child1_child2.setWidth(30f);\n    root_child1_child2.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setHeight(30f);\n    root_child1_child3.setWidth(30f);\n    root_child1_child3.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child3, 3);\n\n    final YogaNode root_child1_child4 = createNode(config);\n    root_child1_child4.setHeight(30f);\n    root_child1_child4.setWidth(30f);\n    root_child1_child4.setMargin(YogaEdge.RIGHT, 20f);\n    root_child1.addChildAt(root_child1_child4, 4);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(50f);\n    root_child2.setMargin(YogaEdge.LEFT, 20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(330f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(260f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(170f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1_child4.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_and_align_items_flex_end_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_START);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_and_align_items_flex_start_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(175f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(175f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_and_align_items_center_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(38f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_content_stretch_and_align_items_stretch_with_flex_wrap() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidth(150f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root_child1.setWidth(120f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(50f);\n    root_child2.setWidth(120f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(175f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(175f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAlignItemsTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<309d24a29d92477022ee155afc4ade82>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignItemsTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAlignItemsTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_align_items_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_multiline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(25f);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(25f);\n    root_child1_child0.setHeight(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setWidth(25f);\n    root_child1_child1.setHeight(10f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setWidth(25f);\n    root_child1_child2.setHeight(20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setWidth(25f);\n    root_child1_child3.setHeight(10f);\n    root_child1.addChildAt(root_child1_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_multiline_override() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(25f);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(25f);\n    root_child1_child0.setHeight(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setWidth(25f);\n    root_child1_child1.setHeight(10f);\n    root_child1_child1.setAlignSelf(YogaAlign.BASELINE);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setWidth(25f);\n    root_child1_child2.setHeight(20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setWidth(25f);\n    root_child1_child3.setHeight(10f);\n    root_child1_child3.setAlignSelf(YogaAlign.BASELINE);\n    root_child1.addChildAt(root_child1_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_multiline_no_override_on_secondline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(25f);\n    root_child1.setWrap(YogaWrap.WRAP);\n    root_child1.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(25f);\n    root_child1_child0.setHeight(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setWidth(25f);\n    root_child1_child1.setHeight(10f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setWidth(25f);\n    root_child1_child2.setHeight(20f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child1_child3 = createNode(config);\n    root_child1_child3.setWidth(25f);\n    root_child1_child3.setHeight(10f);\n    root_child1_child3.setAlignSelf(YogaAlign.BASELINE);\n    root_child1.addChildAt(root_child1_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child3.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_top2() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root_child1.setPosition(YogaEdge.TOP, 5f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_double_nested_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(20f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(15f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(15f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(15f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMargin(YogaEdge.ALL, 5f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1_child0.setMargin(YogaEdge.ALL, 1f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(44f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(1f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(1f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(44f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-1f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(1f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_child_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root_child1.setPadding(YogaEdge.ALL, 5);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(55f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-5f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-5f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_multiline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child2_child0 = createNode(config);\n    root_child2_child0.setWidth(50f);\n    root_child2_child0.setHeight(10f);\n    root_child2.addChildAt(root_child2_child0, 0);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(50f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_align_baseline_multiline_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.BASELINE);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(30f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(20f);\n    root_child1_child0.setHeight(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root_child2.setHeight(70f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child2_child0 = createNode(config);\n    root_child2_child0.setWidth(10f);\n    root_child2_child0.setHeight(10f);\n    root_child2.addChildAt(root_child2_child0, 0);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_align_baseline_multiline_column2() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.BASELINE);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(30f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(20f);\n    root_child1_child0.setHeight(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root_child2.setHeight(70f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child2_child0 = createNode(config);\n    root_child2_child0.setWidth(10f);\n    root_child2_child0.setHeight(10f);\n    root_child2.addChildAt(root_child2_child0, 0);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_baseline_multiline_row_and_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.BASELINE);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child2_child0 = createNode(config);\n    root_child2_child0.setWidth(50f);\n    root_child2_child0.setHeight(10f);\n    root_child2.addChildAt(root_child2_child0, 0);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(50f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_center_child_with_margin_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.CENTER);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(52f);\n    root_child0_child0.setHeight(52f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 10f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_flex_end_child_with_margin_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(52f);\n    root_child0_child0.setHeight(52f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 10f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_center_child_without_margin_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.CENTER);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(72f);\n    root_child0_child0.setHeight(72f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_flex_end_child_without_margin_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(72f);\n    root_child0_child0.setHeight(72f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_center_should_size_based_on_content() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setMargin(YogaEdge.TOP, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexShrink(1f);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidth(20f);\n    root_child0_child0_child0.setHeight(20f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(20f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(20f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_stretch_should_size_based_on_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setMargin(YogaEdge.TOP, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexShrink(1f);\n    root_child0.setJustifyContent(YogaJustify.CENTER);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidth(20f);\n    root_child0_child0_child0.setHeight(20f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(20f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(20f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_flex_start_with_shrinking_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.FLEX_START);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setFlexGrow(1f);\n    root_child0_child0_child0.setFlexShrink(1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(500f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_flex_start_with_stretching_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setFlexGrow(1f);\n    root_child0_child0_child0.setFlexShrink(1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_flex_start_with_shrinking_children_with_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAlignItems(YogaAlign.FLEX_START);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setFlexGrow(1f);\n    root_child0_child0_child0.setFlexShrink(1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(500f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_flex_end_with_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(75f);\n    root.setAlignItems(YogaAlign.FLEX_END);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMargin(YogaEdge.RIGHT, 5f);\n    root_child0.setMargin(YogaEdge.LEFT, 3f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(3f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(58f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-8f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_stretch_with_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(75f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMargin(YogaEdge.RIGHT, 5f);\n    root_child0.setMargin(YogaEdge.LEFT, 3f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(3f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(58f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-8f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_non_stretch_s526008() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(400f);\n    root.setHeight(400f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setAlignItems(YogaAlign.FLEX_START);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(0f);\n    root_child0_child0_child0_child0.setHeight(10f);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(400f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAlignSelfTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<13d0f5f70b716118796f3e4aff80c608>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignSelfTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAlignSelfTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_align_self_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root_child0.setAlignSelf(YogaAlign.CENTER);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_self_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_self_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_START);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_self_flex_end_override_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root_child0.setAlignSelf(YogaAlign.FLEX_END);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_self_baseline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setAlignSelf(YogaAlign.BASELINE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(20f);\n    root_child1.setAlignSelf(YogaAlign.BASELINE);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(50f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAndroidNewsFeed.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<ff1dbef851d5f85861f944599c48a40e>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAndroidNewsFeed.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAndroidNewsFeed {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_android_news_feed() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setAlignContent(YogaAlign.STRETCH);\n    root.setWidth(1080f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child0_child0.setAlignItems(YogaAlign.FLEX_START);\n    root_child0_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 24f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.START, 36f);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0_child0_child0.setWidth(120f);\n    root_child0_child0_child0_child0_child0_child0.setHeight(120f);\n    root_child0_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child1 = createNode(config);\n    root_child0_child0_child0_child0_child1.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0_child1.setFlexShrink(1f);\n    root_child0_child0_child0_child0_child1.setMargin(YogaEdge.RIGHT, 36f);\n    root_child0_child0_child0_child0_child1.setPadding(YogaEdge.LEFT, 36);\n    root_child0_child0_child0_child0_child1.setPadding(YogaEdge.TOP, 21);\n    root_child0_child0_child0_child0_child1.setPadding(YogaEdge.RIGHT, 36);\n    root_child0_child0_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 18);\n    root_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child0_child0_child1_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child0_child0_child1_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0_child1_child0.setFlexShrink(1f);\n    root_child0_child0_child0_child0_child1.addChildAt(root_child0_child0_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child1_child1 = createNode(config);\n    root_child0_child0_child0_child0_child1_child1.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0_child0_child1_child1.setFlexShrink(1f);\n    root_child0_child0_child0_child0_child1.addChildAt(root_child0_child0_child0_child0_child1_child1, 1);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child1_child0.setAlignItems(YogaAlign.FLEX_START);\n    root_child0_child0_child1_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 24f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.START, 174f);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child1_child0_child0 = createNode(config);\n    root_child0_child0_child1_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child1_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0.addChildAt(root_child0_child0_child1_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1_child0_child0_child0 = createNode(config);\n    root_child0_child0_child1_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0_child0_child0.setWidth(72f);\n    root_child0_child0_child1_child0_child0_child0.setHeight(72f);\n    root_child0_child0_child1_child0_child0.addChildAt(root_child0_child0_child1_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1_child0_child1 = createNode(config);\n    root_child0_child0_child1_child0_child1.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0_child1.setFlexShrink(1f);\n    root_child0_child0_child1_child0_child1.setMargin(YogaEdge.RIGHT, 36f);\n    root_child0_child0_child1_child0_child1.setPadding(YogaEdge.LEFT, 36);\n    root_child0_child0_child1_child0_child1.setPadding(YogaEdge.TOP, 21);\n    root_child0_child0_child1_child0_child1.setPadding(YogaEdge.RIGHT, 36);\n    root_child0_child0_child1_child0_child1.setPadding(YogaEdge.BOTTOM, 18);\n    root_child0_child0_child1_child0.addChildAt(root_child0_child0_child1_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0_child1_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0_child1_child0_child1_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0_child1_child0.setFlexShrink(1f);\n    root_child0_child0_child1_child0_child1.addChildAt(root_child0_child0_child1_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child1_child0_child1_child1 = createNode(config);\n    root_child0_child0_child1_child0_child1_child1.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child1_child0_child1_child1.setFlexShrink(1f);\n    root_child0_child0_child1_child0_child1.addChildAt(root_child0_child0_child1_child0_child1_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1080f, root.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(144f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1044f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child0_child0_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(39f, root_child0_child0_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child0_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child0_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(144f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(96f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(174f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(906f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(72f, root_child0_child0_child1_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(39f, root_child0_child0_child1_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child1_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child1_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child1_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child1_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1080f, root.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(240f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(144f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1044f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(924f, root_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(816f, root_child0_child0_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(39f, root_child0_child0_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child0_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child0_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(144f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(96f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(906f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(834f, root_child0_child0_child1_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(726f, root_child0_child0_child1_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0_child0_child1_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(39f, root_child0_child0_child1_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child1_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child1_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0_child0_child1_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0_child1_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1_child0_child1_child1.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAspectRatioTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<8b4a31ae00448d1d53e9449c804b2a79>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAspectRatioTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAspectRatioTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  @Ignore\n  public void test_aspect_ratio_does_not_stretch_cross_axis_dim() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setOverflow(YogaOverflow.SCROLL);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setFlexGrow(2f);\n    root_child0_child0_child0.setFlexShrink(1f);\n    root_child0_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0_child0.setAspectRatio(1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidth(5f);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setFlexGrow(1f);\n    root_child0_child0_child2.setFlexShrink(1f);\n    root_child0_child0_child2.setFlexBasisPercent(0f);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setFlexGrow(1f);\n    root_child0_child0_child2_child0.setFlexShrink(1f);\n    root_child0_child0_child2_child0.setFlexBasisPercent(0f);\n    root_child0_child0_child2_child0.setAspectRatio(1f);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n\n    final YogaNode root_child0_child0_child2_child0_child0 = createNode(config);\n    root_child0_child0_child2_child0_child0.setWidth(5f);\n    root_child0_child0_child2_child0.addChildAt(root_child0_child0_child2_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child2_child0_child1 = createNode(config);\n    root_child0_child0_child2_child0_child1.setFlexGrow(1f);\n    root_child0_child0_child2_child0_child1.setFlexShrink(1f);\n    root_child0_child0_child2_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child0_child2_child0_child1.setAspectRatio(1f);\n    root_child0_child0_child2_child0.addChildAt(root_child0_child0_child2_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(197f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(197f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(5f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(202f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(5f, root_child0_child0_child2_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(103f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(197f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(98f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(5f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(93f, root_child0_child0_child2_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(5f, root_child0_child0_child2_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child2_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(98f, root_child0_child0_child2_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(197f, root_child0_child0_child2_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_zero_aspect_ratio_behaves_like_auto() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setAspectRatio(0f);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGAutoTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<649daae1073830c91842097b7bac9cda>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAutoTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGAutoTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_auto_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidthAuto();\n    root.setHeight(50f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_auto_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(50f);\n    root.setHeightAuto();\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_auto_flex_basis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(50f);\n    root.setFlexBasisAuto();\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_auto_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(50f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root_child0.setPositionAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_auto_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(50f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGBorderTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f88913ed85e6f5c4f4d1dec73112a516>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBorderTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGBorderTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_border_no_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_border_container_match_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setBorder(YogaEdge.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_border_flex_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_border_stretch_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_border_center_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.START, 10f);\n    root.setBorder(YogaEdge.END, 20f);\n    root.setBorder(YogaEdge.BOTTOM, 20f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(35f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(35f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGBoxSizingTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f2d9bd732c469e389edee8c69d64dc40>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBoxSizingTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGBoxSizingTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_box_sizing_content_box_simple() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(130f, root.getLayoutWidth(), 0.0f);\n    assertEquals(130f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(130f, root.getLayoutWidth(), 0.0f);\n    assertEquals(130f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_simple() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeightPercent(25f);\n    root_child0.setPadding(YogaEdge.ALL, 4);\n    root_child0.setBorder(YogaEdge.ALL, 16f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeightPercent(25f);\n    root_child0.setPadding(YogaEdge.ALL, 4);\n    root_child0.setBorder(YogaEdge.ALL, 16f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_absolute() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightPercent(25f);\n    root_child0.setPadding(YogaEdge.ALL, 12);\n    root_child0.setBorder(YogaEdge.ALL, 8f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_absolute() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightPercent(25f);\n    root_child0.setPadding(YogaEdge.ALL, 12);\n    root_child0.setBorder(YogaEdge.ALL, 8f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_comtaining_block() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 12);\n    root.setBorder(YogaEdge.ALL, 8f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.STATIC);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeightPercent(25f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(31f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(140f, root.getLayoutWidth(), 0.0f);\n    assertEquals(140f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(31f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_comtaining_block() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 12);\n    root.setBorder(YogaEdge.ALL, 8f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.STATIC);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeightPercent(25f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_padding_only() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_padding_only_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(150f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(75f);\n    root_child0.setPaddingPercent(YogaEdge.ALL, 10);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(95f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(95f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_padding_only() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_padding_only_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(150f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(75f);\n    root_child0.setPaddingPercent(YogaEdge.ALL, 10);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_border_only() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(120f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(120f, root.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_border_only_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_border_only() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_border_only_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_no_padding_no_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_no_padding_no_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setBorder(YogaEdge.ALL, 10f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(25f);\n    root_child3.setHeight(25f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(130f, root.getLayoutWidth(), 0.0f);\n    assertEquals(130f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(130f, root.getLayoutWidth(), 0.0f);\n    assertEquals(130f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_children() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 5);\n    root.setBorder(YogaEdge.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(25f);\n    root_child3.setHeight(25f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_siblings() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root_child1.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child1.setPadding(YogaEdge.ALL, 10);\n    root_child1.setBorder(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(25f);\n    root_child3.setHeight(25f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(115f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(35f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(115f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_siblings() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(25f);\n    root_child0.setHeight(25f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root_child1.setPadding(YogaEdge.ALL, 10);\n    root_child1.setBorder(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(25f);\n    root_child3.setHeight(25f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidth(50f);\n    root_child0.setHeight(25f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidth(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setMaxHeight(50f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setMaxHeight(50f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidth(50f);\n    root_child0.setHeight(25f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidth(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setMinHeight(50f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setMinHeight(50f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 15f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(25f);\n    root_child1.setHeight(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_no_height_no_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 2);\n    root_child0.setBorder(YogaEdge.ALL, 7f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_no_height_no_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPadding(YogaEdge.ALL, 2);\n    root_child0.setBorder(YogaEdge.ALL, 7f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_nested() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setPadding(YogaEdge.ALL, 15);\n    root.setBorder(YogaEdge.ALL, 3f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 2);\n    root_child0.setBorder(YogaEdge.ALL, 7f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(5f);\n    root_child0_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0_child0.setPadding(YogaEdge.ALL, 1);\n    root_child0_child0.setBorder(YogaEdge.ALL, 2f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(136f, root.getLayoutWidth(), 0.0f);\n    assertEquals(136f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(16f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(11f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(136f, root.getLayoutWidth(), 0.0f);\n    assertEquals(136f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(38f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(13f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(16f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(11f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_nested() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 15);\n    root.setBorder(YogaEdge.ALL, 3f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPadding(YogaEdge.ALL, 2);\n    root_child0.setBorder(YogaEdge.ALL, 7f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(5f);\n    root_child0_child0.setPadding(YogaEdge.ALL, 1);\n    root_child0_child0.setBorder(YogaEdge.ALL, 2f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(6f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(1f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(6f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_nested_alternating() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setPadding(YogaEdge.ALL, 3);\n    root.setBorder(YogaEdge.ALL, 2f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root_child0.setHeight(40f);\n    root_child0.setPadding(YogaEdge.ALL, 8);\n    root_child0.setBorder(YogaEdge.ALL, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(20f);\n    root_child0_child0.setHeight(25f);\n    root_child0_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0_child0.setPadding(YogaEdge.ALL, 3);\n    root_child0_child0.setBorder(YogaEdge.ALL, 6f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidth(10f);\n    root_child0_child0_child0.setHeight(5f);\n    root_child0_child0_child0.setPadding(YogaEdge.ALL, 1);\n    root_child0_child0_child0.setBorder(YogaEdge.ALL, 1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(38f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(43f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(5f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(110f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(65f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-8f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(38f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(43f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(19f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(5f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_nested_alternating() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 3);\n    root.setBorder(YogaEdge.ALL, 2f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root_child0.setHeight(40f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0.setPadding(YogaEdge.ALL, 8);\n    root_child0.setBorder(YogaEdge.ALL, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(20f);\n    root_child0_child0.setHeight(25f);\n    root_child0_child0.setPadding(YogaEdge.ALL, 3);\n    root_child0_child0.setBorder(YogaEdge.ALL, 6f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidth(10f);\n    root_child0_child0_child0.setHeight(5f);\n    root_child0_child0_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root_child0_child0_child0.setPadding(YogaEdge.ALL, 1);\n    root_child0_child0_child0.setBorder(YogaEdge.ALL, 1f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(14f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(35f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-3f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(14f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(9f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_box_sizing_content_box_flex_basis_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 10f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_flex_basis_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_box_sizing_content_box_flex_basis_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 10f);\n    root_child0.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_flex_basis_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setHeight(25f);\n    root_child0.setPadding(YogaEdge.ALL, 5);\n    root_child0.setBorder(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_padding_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.START, 5);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_padding_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.START, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_padding_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.END, 5);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_padding_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.END, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_border_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.START, 5f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_border_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.START, 5f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_content_box_border_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.END, 5f);\n    root.setBoxSizing(YogaBoxSizing.CONTENT_BOX);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(105f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_box_sizing_border_box_border_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setBorder(YogaEdge.END, 5f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGDimensionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<28226b97f32ae39c8bbf96678867c310>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDimensionTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGDimensionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_wrap_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_grandchild() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setHeight(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGDisplayContentsTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<be0d102e74e15f15050520f21afcaee1>>\n * generated by gentest/gentest-driver.ts from gentest/fixtures/YGDisplayContentsTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGDisplayContentsTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_test1() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGDisplayTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<b328c922a3229d52d3cbe8932627dc62>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDisplayTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGDisplayTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_display_none() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setDisplay(YogaDisplay.NONE);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_none_fixed_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root_child1.setDisplay(YogaDisplay.NONE);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_none_with_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setDisplay(YogaDisplay.NONE);\n    root_child0.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_none_with_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root_child1.setDisplay(YogaDisplay.NONE);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setFlexGrow(1f);\n    root_child1_child0.setFlexShrink(1f);\n    root_child1_child0.setFlexBasisPercent(0f);\n    root_child1_child0.setWidth(20f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_none_with_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setDisplay(YogaDisplay.NONE);\n    root_child1.setPosition(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_none_with_position_absolute() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.NONE);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_fixed_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_with_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.setMargin(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_with_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_with_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.setPosition(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_with_position_absolute() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexGrow(1f);\n    root_child0_child1.setFlexShrink(1f);\n    root_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child1.setHeight(20f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_nested() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setDisplay(YogaDisplay.CONTENTS);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setDisplay(YogaDisplay.CONTENTS);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setFlexGrow(1f);\n    root_child0_child0_child0.setFlexShrink(1f);\n    root_child0_child0_child0.setFlexBasisPercent(0f);\n    root_child0_child0_child0.setHeight(10f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setFlexGrow(1f);\n    root_child0_child0_child1.setFlexShrink(1f);\n    root_child0_child0_child1.setFlexBasisPercent(0f);\n    root_child0_child0_child1.setHeight(20f);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_display_contents_with_siblings() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setHeight(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setDisplay(YogaDisplay.CONTENTS);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setFlexGrow(1f);\n    root_child1_child0.setFlexShrink(1f);\n    root_child1_child0.setFlexBasisPercent(0f);\n    root_child1_child0.setHeight(10f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setFlexGrow(1f);\n    root_child1_child1.setFlexShrink(1f);\n    root_child1_child1.setFlexBasisPercent(0f);\n    root_child1_child1.setHeight(20f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root_child2.setHeight(30f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGFlexBasisFitContentTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<43053b7b4f9b08ef644e0bb63c44e78f>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexBasisFitContentTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGFlexBasisFitContentTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_container_child_overflows_definite_parent_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(500f);\n    root_child0_child0.setWidth(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_container_child_overflows_definite_parent_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(500f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_container_child_within_bounds_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_multiple_container_children_overflow_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(400f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(500f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_scroll_container_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n    root.setOverflow(YogaOverflow.SCROLL);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(500f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_explicit_and_container_children_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(500f);\n    root_child1.addChildAt(root_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_basis_in_scroll_content_container() {\n    YogaConfig config = YogaConfigFactory.create();\n    config.setExperimentalFeatureEnabled(YogaExperimentalFeature.FIX_FLEX_BASIS_FIT_CONTENT, true);\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(300f);\n    root.setOverflow(YogaOverflow.SCROLL);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexBasis(200f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setFlexBasis(300f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGFlexDirectionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<6cca3f234b902a23ceaa2a5f200d1c13>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexDirectionTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGFlexDirectionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_flex_direction_column_no_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_no_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_margin_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setMargin(YogaEdge.LEFT, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_margin_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setMargin(YogaEdge.START, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_margin_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setMargin(YogaEdge.RIGHT, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_margin_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setMargin(YogaEdge.END, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_margin_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setMargin(YogaEdge.TOP, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_margin_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setMargin(YogaEdge.BOTTOM, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_padding_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setPadding(YogaEdge.LEFT, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_padding_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setPadding(YogaEdge.START, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_padding_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setPadding(YogaEdge.RIGHT, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_padding_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setPadding(YogaEdge.END, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_padding_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setPadding(YogaEdge.TOP, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_padding_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setPadding(YogaEdge.BOTTOM, 100);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_border_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setBorder(YogaEdge.LEFT, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_border_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setBorder(YogaEdge.START, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_border_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setBorder(YogaEdge.RIGHT, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_border_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setBorder(YogaEdge.END, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_border_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setBorder(YogaEdge.TOP, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_border_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.setBorder(YogaEdge.BOTTOM, 100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_pos_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setPosition(YogaEdge.LEFT, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_pos_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setPosition(YogaEdge.START, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_pos_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setPosition(YogaEdge.RIGHT, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_pos_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.setPosition(YogaEdge.END, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_pos_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.setPosition(YogaEdge.TOP, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_column_reverse_pos_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.setPosition(YogaEdge.BOTTOM, 100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_pos_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.LEFT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_pos_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_pos_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.TOP, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_pos_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.BOTTOM, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_flex_direction_row_reverse_inner_pos_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.START, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_flex_direction_row_reverse_inner_pos_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPosition(YogaEdge.END, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_margin_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_margin_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_margin_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.TOP, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_margin_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_marign_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.START, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_margin_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setMargin(YogaEdge.END, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_border_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_border_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_border_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_border_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_border_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.START, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_border_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setBorder(YogaEdge.END, 10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_padding_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_padding_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_padding_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.TOP, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_col_reverse_inner_padding_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(90f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_padding_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.START, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_row_reverse_inner_padding_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.setPadding(YogaEdge.END, 10);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(10f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_direction_alternating_with_percent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(300f);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightPercent(50f);\n    root_child0.setWidthPercent(50f);\n    root_child0.setPositionPercent(YogaEdge.LEFT, 10f);\n    root_child0.setPositionPercent(YogaEdge.TOP, 10f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGFlexTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<9d423a7b3fce868ebace7ffc938a4aea>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGFlexTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_flex_basis_flex_grow_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_shrink_flex_grow_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(100f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(500f);\n    root_child1.setHeight(100f);\n    root_child1.setFlexShrink(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_shrink_flex_grow_child_flex_shrink_other_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(100f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(500f);\n    root_child1.setHeight(100f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_basis_flex_grow_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_basis_flex_shrink_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(100f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexBasis(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_basis_flex_shrink_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(100f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexBasis(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_shrink_to_zero() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(75f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root_child1.setFlexShrink(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_basis_overrides_main_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_shrink_at_most() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_less_than_factor_one() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(0.2f);\n    root_child0.setFlexBasis(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(0.2f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(0.4f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(132f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(132f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(224f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(184f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(132f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(132f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(224f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(184f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGFlexWrapTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<42f3bb9cf24632362e8ad90c1e7041ef>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexWrapTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGFlexWrapTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  @Ignore\n  public void test_wrap_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(30f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(30f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(30f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(30f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(30f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(30f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_row_align_items_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(30f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_row_align_items_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(30f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_wrap_children_with_min_main_overriding_flex_basis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMinWidth(55f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexBasis(50f);\n    root_child1.setHeight(50f);\n    root_child1.setMinWidth(55f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(55f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_wrap_wrap_to_child_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setAlignItems(YogaAlign.FLEX_START);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0.setWidth(100f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_wrap_align_stretch_fits_one_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(150f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(150f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_row_align_content_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_row_align_content_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n    root.setAlignContent(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_row_single_line_different_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(270f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(240f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(210f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_row_align_content_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_row_align_content_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_reverse_column_fixed_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP_REVERSE);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(30f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root_child1.setWidth(30f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setHeight(40f);\n    root_child3.setWidth(30f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setHeight(50f);\n    root_child4.setWidth(30f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(170f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(170f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(170f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(170f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrapped_row_within_align_items_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(150f);\n    root_child0_child0.setHeight(80f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(80f);\n    root_child0_child1.setHeight(80f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrapped_row_within_align_items_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(150f);\n    root_child0_child0.setHeight(80f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(80f);\n    root_child0_child1.setHeight(80f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrapped_row_within_align_items_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(150f);\n    root_child0_child0.setHeight(80f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(80f);\n    root_child0_child1.setHeight(80f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrapped_column_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(700f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setAlignContent(YogaAlign.CENTER);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(500f);\n    root_child0.setMaxHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(200f);\n    root_child1.setHeight(200f);\n    root_child1.setMargin(YogaEdge.ALL, 20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(700f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(420f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(700f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(350f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(300f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(250f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(180f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrapped_column_max_height_flex() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n    root.setWidth(700f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setAlignContent(YogaAlign.CENTER);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(500f);\n    root_child0.setMaxHeight(200f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(200f);\n    root_child1.setHeight(200f);\n    root_child1.setMargin(YogaEdge.ALL, 20f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(700f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(300f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(180f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(180f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(300f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(700f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(300f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(180f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(180f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(300f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_nodes_with_content_sizing_overflowing_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setWidth(85f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(40f);\n    root_child0_child0_child0.setWidth(40f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setMargin(YogaEdge.RIGHT, 10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child1_child0 = createNode(config);\n    root_child0_child1_child0.setHeight(40f);\n    root_child0_child1_child0.setWidth(40f);\n    root_child0_child1.addChildAt(root_child0_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(85f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(415f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(85f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(35f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_nodes_with_content_sizing_margin_cross() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setWidth(70f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(40f);\n    root_child0_child0_child0.setWidth(40f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setMargin(YogaEdge.TOP, 10f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child1_child0 = createNode(config);\n    root_child0_child1_child0.setHeight(40f);\n    root_child0_child1_child0.setWidth(40f);\n    root_child0_child1.addChildAt(root_child0_child1_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(430f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_with_min_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMinHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_with_max_cross_axis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setMaxHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(400f);\n    root_child1.setHeight(200f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_nowrap_expands_flexline_box_to_min_cross() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_wrap_does_not_impose_min_cross_onto_single_flexline() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGGapTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<1bf35956f67606a5ecbce54bba0b41df>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGGapTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGGapTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_column_gap_flexible() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(80f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_inflexible() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(80f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_mixed_flexible() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(80f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_child_margins() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(80f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setMargin(YogaEdge.HORIZONTAL, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root_child1.setMargin(YogaEdge.HORIZONTAL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root_child2.setMargin(YogaEdge.HORIZONTAL, 15f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(2f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(26f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(63f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(76f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(52f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(2f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_row_gap_wrapping() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(80f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n\n    final YogaNode root_child6 = createNode(config);\n    root_child6.setWidth(20f);\n    root_child6.setHeight(20f);\n    root.addChildAt(root_child6, 6);\n\n    final YogaNode root_child7 = createNode(config);\n    root_child7.setWidth(20f);\n    root_child7.setHeight(20f);\n    root.addChildAt(root_child7, 7);\n\n    final YogaNode root_child8 = createNode(config);\n    root_child8.setWidth(20f);\n    root_child8.setHeight(20f);\n    root.addChildAt(root_child8, 8);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child6.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child6.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child6.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child6.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child7.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child7.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child7.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child7.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child8.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child8.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child8.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child8.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child6.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child6.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child6.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child6.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child7.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child7.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child7.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child7.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child8.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child8.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child8.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child8.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_start_index() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(80f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_space_between() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_BETWEEN);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_AROUND);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(3f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(77f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(77f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(3f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_justify_space_evenly() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.CENTER);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.FLEX_END);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_space_between() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_BETWEEN);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setAlignContent(YogaAlign.SPACE_AROUND);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root_child3.setHeight(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root_child4.setHeight(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root_child5.setHeight(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(70f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_wrap_align_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setGap(YogaGutter.COLUMN, 5f);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidth(60f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setMinWidth(60f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setMinWidth(60f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setMinWidth(60f);\n    root_child3.setFlexGrow(1f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setMinWidth(60f);\n    root_child4.setFlexGrow(1f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(76f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(153f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(229f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(229f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(153f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(76f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(71f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_gap_determines_parent_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setHeight(100f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(30f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_align_items_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(100f);\n    root.setHeight(200f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(110f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_align_items_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(100f);\n    root.setHeight(200f);\n    root.setGap(YogaGutter.COLUMN, 10f);\n    root.setGap(YogaGutter.ROW, 20f);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(20f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(20f);\n    root.addChildAt(root_child4, 4);\n\n    final YogaNode root_child5 = createNode(config);\n    root_child5.setWidth(20f);\n    root.addChildAt(root_child5, 5);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child5.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child5.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child5.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child5.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_column_child_margins() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(200f);\n    root.setGap(YogaGutter.ROW, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setMargin(YogaEdge.VERTICAL, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root_child1.setMargin(YogaEdge.VERTICAL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root_child2.setMargin(YogaEdge.VERTICAL, 15f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(66f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(143f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(66f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(143f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(42f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_row_wrap_child_margins() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWrap(YogaWrap.WRAP);\n    root.setWidth(100f);\n    root.setHeight(200f);\n    root.setGap(YogaGutter.ROW, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(60f);\n    root_child0.setMargin(YogaEdge.VERTICAL, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(60f);\n    root_child1.setMargin(YogaEdge.VERTICAL, 10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(60f);\n    root_child2.setMargin(YogaEdge.VERTICAL, 15f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(2f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_determines_parent_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setGap(YogaGutter.ROW, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(30f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(700f);\n    root.setPadding(YogaEdge.ALL, 10);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_determines_parent_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_both_content_padding_and_item_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(700f);\n    root.setPadding(YogaEdge.ALL, 10);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root_child1.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root_child2.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root_child3.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root_child4.setPadding(YogaEdge.ALL, 10);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_both_content_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(700f);\n    root.setPadding(YogaEdge.ALL, 10);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_content_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(700f);\n    root.setMargin(YogaEdge.ALL, 10f);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(170f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(170f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(340f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(170f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(170f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(340f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_content_margin_and_padding() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(700f);\n    root.setMargin(YogaEdge.ALL, 10f);\n    root.setPadding(YogaEdge.ALL, 10);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(138f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(10f, root.getLayoutX(), 0.0f);\n    assertEquals(10f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(700f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(178f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(190f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(346f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_flexible_content() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root_child2.setFlexShrink(1f);\n    root_child2.setFlexBasisPercent(0f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(220f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(220f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(110f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_row_gap_percent_wrapping_with_mixed_flexible_content() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(300f);\n    root.setHeight(300f);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexShrink(1f);\n    root_child1.setFlexBasisPercent(0f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidthPercent(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(270f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(290f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_row_gap_percent_wrapping_with_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMinWidth(300f);\n    root.setGapPercent(YogaGutter.ALL, 10f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root_child2.setHeight(100f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setWidth(100f);\n    root_child3.setHeight(100f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setWidth(100f);\n    root_child4.setHeight(100f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(130f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(70f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGIntrinsicSizeTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<4f4bde7775299127acc8a118ff1a9c74>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGIntrinsicSizeTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGIntrinsicSizeTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_contains_inner_text_long_word() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(700f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1300f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_no_width_no_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_no_width_no_height_long_word_in_paragraph() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(70f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_fixed_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1290f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1900f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1290f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_no_width_fixed_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_fixed_width_fixed_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1950f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_max_width_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidth(50f);\n    root_child0.setMaxHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1950f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_max_width_max_height_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidth(50f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1890f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1890f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1890f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1950f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1890f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidth(100f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1290f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1900f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(1290f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_fixed_width_shorter_text() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1900f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_fixed_height_shorter_text() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setHeight(100f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(110f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(1890f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(110f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_contains_inner_text_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(2000f);\n    root.setHeight(2000f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root_child0.setData(\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n    root_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(2000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(2000f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(2000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_content_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidthMaxContent();\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWidthFitContent();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_stretch_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setWidthStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(450f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(350f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(325f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_content_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeightMaxContent();\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightFitContent();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_content_flex_basis_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexBasisMaxContent();\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_flex_basis_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasisFitContent();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_stretch_flex_basis_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasisStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_max_content_flex_basis_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setFlexBasisMaxContent();\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(500f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(600f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(550f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(600f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(550f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_flex_basis_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setFlexBasisFitContent();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(90f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(65f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_flex_basis_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setFlexBasisStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(450f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(350f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(325f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_max_content_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMaxWidthMaxContent();\n    root.setWidth(200f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidthFitContent();\n    root_child0.setWidth(110f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidthStretch();\n    root_child0.setWidth(600f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(450f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(350f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(325f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_max_content_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMinWidthMaxContent();\n    root.setWidth(100f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(100f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(25f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(175f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMinWidthFitContent();\n    root_child0.setWidth(90f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(90f, root.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMinWidthStretch();\n    root_child0.setWidth(400f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setHeight(50f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(450f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(350f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(325f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_max_content_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxHeightMaxContent();\n    root.setHeight(200f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(175f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxHeightFitContent();\n    root_child0.setHeight(110f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxHeightStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setHeight(600f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_max_content_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeightMaxContent();\n    root.setHeight(100f);\n    root.setWrap(YogaWrap.WRAP);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(25f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_fit_content_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(90f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinHeightFitContent();\n    root_child0.setHeight(90f);\n    root_child0.setWrap(YogaWrap.WRAP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(90f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_stretch_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinHeightStretch();\n    root_child0.setWrap(YogaWrap.WRAP);\n    root_child0.setHeight(400f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setWidth(50f);\n    root_child0_child2.setHeight(25f);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_max_content_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthMaxContent();\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-940f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_stretch_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthStretch();\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_fit_content_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthFitContent();\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-670f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_max_content_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidthMaxContent();\n    root_child0.setWidth(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-940f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_stretch_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidthStretch();\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_fit_content_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidthFitContent();\n    root_child0.setWidth(300f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-670f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_max_content_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidthMaxContent();\n    root_child0.setWidth(2000f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-940f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(1140f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_stretch_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidthStretch();\n    root_child0.setWidth(300f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_text_fit_content_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMaxWidthFitContent();\n    root_child0.setWidth(1000f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root_child0_child0.setData(\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n    root_child0_child0.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-670f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(870f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGJustifyContentTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<8153ff1a843e9f95e5cc8c0243e582bc>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGJustifyContentTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGJustifyContentTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_justify_content_row_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(92f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(82f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(72f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(72f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(82f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(92f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(56f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(56f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(36f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_space_between() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(92f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(92f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(12f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(12f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(82f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(92f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(82f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(92f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(36f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(56f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(36f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(56f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_space_between() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(92f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(92f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(12f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(12f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_min_width_and_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(50f);\n    root.setMargin(YogaEdge.LEFT, 100f);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_max_width_and_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setMaxWidth(80f);\n    root.setMargin(YogaEdge.LEFT, 100f);\n    root.setJustifyContent(YogaJustify.CENTER);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(100f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(80f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_min_height_and_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(50f);\n    root.setMargin(YogaEdge.TOP, 100f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(15f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_max_height_and_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setMaxHeight(80f);\n    root.setMargin(YogaEdge.TOP, 100f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(100f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_column_space_evenly() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(74f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(18f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(46f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(74f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_row_space_evenly() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(26f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(51f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(77f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(77f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(51f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(26f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_min_width_with_padding_child_width_greater_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(1000f);\n    root.setHeight(1584f);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setAlignContent(YogaAlign.STRETCH);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0.setMinWidth(400f);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 100);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 100);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0.setWidth(300f);\n    root_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1584f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1000f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1584f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1000f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(500f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(300f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_min_width_with_padding_child_width_lower_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(1080f);\n    root.setHeight(1584f);\n    root.setAlignContent(YogaAlign.STRETCH);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setAlignContent(YogaAlign.STRETCH);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0.setMinWidth(400f);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 100);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 100);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0.setWidth(199f);\n    root_child0_child0_child0.setAlignContent(YogaAlign.STRETCH);\n    root_child0_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1080f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1584f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(101f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(199f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(1080f, root.getLayoutWidth(), 0.0f);\n    assertEquals(1584f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(1080f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(680f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(101f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(199f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_space_between_indefinite_container_dim_with_free_space() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(300f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMinWidth(200f);\n    root_child0.setJustifyContent(YogaJustify.SPACE_BETWEEN);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(50f);\n    root_child0_child0.setHeight(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0_child1.setHeight(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(300f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_flex_start_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_flex_end_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_flex_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_flex_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-9f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(31f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(71f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(71f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(31f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-9f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_space_between() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_BETWEEN);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_space_evenly() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_justify_content_overflow_row_reverse_space_around() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setJustifyContent(YogaJustify.SPACE_AROUND);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_justify_content_overflow_row_reverse_space_evenly() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_row_space_evenly_auto_margin() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(102f);\n    root.setHeight(102f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.SPACE_EVENLY);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(40f);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(40f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(40f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(102f, root.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(62f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(22f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-18f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(102f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGMarginTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<ac33a732cd29e69428387ec13799a384>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMarginTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGMarginTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_margin_start() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setMargin(YogaEdge.START, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setMargin(YogaEdge.TOP, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setMargin(YogaEdge.END, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_and_flex_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.START, 10f);\n    root_child0.setMargin(YogaEdge.END, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_and_flex_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 10f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_and_stretch_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 10f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_and_stretch_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.START, 10f);\n    root_child0.setMargin(YogaEdge.END, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_with_sibling_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.END, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(55f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(55f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_with_sibling_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.BOTTOM, 10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(55f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(45f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.BOTTOM);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_bottom_and_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root_child0.setMarginAuto(YogaEdge.BOTTOM);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_bottom_and_top_justify_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root_child0.setMarginAuto(YogaEdge.BOTTOM);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_multiple_children_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root_child1.setMarginAuto(YogaEdge.TOP);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_multiple_children_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root_child1.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_and_right_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_and_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_start_and_end_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.START);\n    root_child0.setMarginAuto(YogaEdge.END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_start_and_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.START);\n    root_child0.setMarginAuto(YogaEdge.END);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_and_right_column_and_center() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_and_right_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_top_and_bottom_stretch() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root_child0.setMarginAuto(YogaEdge.BOTTOM);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_should_not_be_part_of_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(250f);\n    root.setHeight(250f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setMaxHeight(100f);\n    root_child0.setMargin(YogaEdge.TOP, 20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(250f, root.getLayoutWidth(), 0.0f);\n    assertEquals(250f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(250f, root.getLayoutWidth(), 0.0f);\n    assertEquals(250f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_should_not_be_part_of_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(250f);\n    root.setHeight(250f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setMaxWidth(100f);\n    root_child0.setMargin(YogaEdge.LEFT, 20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(250f, root.getLayoutWidth(), 0.0f);\n    assertEquals(250f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(250f, root.getLayoutWidth(), 0.0f);\n    assertEquals(250f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_right_child_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(72f);\n    root_child0.setHeight(72f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_child_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(72f);\n    root_child0.setHeight(72f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_fix_left_auto_right_child_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(72f);\n    root_child0.setHeight(72f);\n    root_child0.setMargin(YogaEdge.LEFT, 10f);\n    root_child0.setMarginAuto(YogaEdge.RIGHT);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_fix_right_child_bigger_than_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(52f);\n    root.setWidth(52f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(72f);\n    root_child0.setHeight(72f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root_child0.setMargin(YogaEdge.RIGHT, 10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(52f, root.getLayoutWidth(), 0.0f);\n    assertEquals(52f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(72f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_top_stretching_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setMarginAuto(YogaEdge.TOP);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_left_stretching_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasisPercent(0f);\n    root_child0.setMarginAuto(YogaEdge.LEFT);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_margin_auto_overflowing_container() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(150f);\n    root_child0.setMarginAuto(YogaEdge.BOTTOM);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(150f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGMinMaxDimensionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f03fd733babdca2e6774d546a779b5c0>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMinMaxDimensionTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGMinMaxDimensionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setMaxWidth(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setMaxHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setMinHeight(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(60f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setMinWidth(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_min_max() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxHeight(200f);\n    root.setMinHeight(100f);\n    root.setWidth(100f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(60f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_align_items_min_max() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxWidth(200f);\n    root.setMinWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(60f);\n    root_child0.setHeight(60f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_justify_content_overflow_min_max() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(100f);\n    root.setMaxHeight(110f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(50f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(50f);\n    root_child2.setHeight(50f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(50f, root.getLayoutWidth(), 0.0f);\n    assertEquals(110f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_to_min() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(100f);\n    root.setMaxHeight(500f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_in_at_most_container() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexBasis(0f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(0f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_min_max_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(100f);\n    root.setMaxHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidth(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(20f);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0.setMaxWidth(300f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(20f);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_root_ignored() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setMinHeight(100f);\n    root.setMaxHeight(500f);\n    root.setFlexGrow(1f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(200f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(100f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_root_minimized() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setMinHeight(100f);\n    root.setMaxHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinHeight(100f);\n    root_child0.setMaxHeight(500f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexBasis(200f);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(300f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_height_maximized() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(500f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinHeight(100f);\n    root_child0.setMaxHeight(500f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexBasis(200f);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setHeight(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(400f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_min_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_min_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_max_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setMaxWidth(100f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexShrink(1f);\n    root_child0_child0.setFlexBasis(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidth(50f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_flex_grow_within_constrained_max_column() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexShrink(1f);\n    root_child0.setFlexBasis(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_child_min_max_width_flexing() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(120f);\n    root.setHeight(50f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidth(60f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(0f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setMaxWidth(20f);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexBasisPercent(50f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(120f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(120f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_min_width_overrides_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(100f);\n    root.setWidth(50f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_width_overrides_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxWidth(100f);\n    root.setWidth(200f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_min_height_overrides_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinHeight(100f);\n    root.setHeight(50f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_max_height_overrides_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxHeight(100f);\n    root.setHeight(200f);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_min_max_percent_no_width_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMinWidthPercent(10f);\n    root_child0.setMaxWidthPercent(10f);\n    root_child0.setMinHeightPercent(10f);\n    root_child0.setMaxHeightPercent(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGPaddingTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f931a2fc73a05dcbdcc8799149e58524>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPaddingTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGPaddingTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_padding_no_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setPadding(YogaEdge.ALL, 10);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(20f, root.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_padding_container_match_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setPadding(YogaEdge.ALL, 10);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(30f, root.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_padding_flex_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 10);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_padding_stretch_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.ALL, 10);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_padding_center_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setPadding(YogaEdge.START, 10);\n    root.setPadding(YogaEdge.END, 20);\n    root.setPadding(YogaEdge.BOTTOM, 20);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setWidth(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(35f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(35f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_child_with_padding_align_end() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setJustifyContent(YogaJustify.FLEX_END);\n    root.setAlignItems(YogaAlign.FLEX_END);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setPadding(YogaEdge.ALL, 20);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_physical_and_relative_edge_defined() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setPadding(YogaEdge.LEFT, 20);\n    root.setPadding(YogaEdge.END, 50);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(100f);\n    root_child0.setHeight(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(130f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGPercentageTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f151ab848e30844e320abe18ac4060cd>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPercentageTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGPercentageTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_percentage_width_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(30f);\n    root_child0.setHeightPercent(30f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(140f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_position_left_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(400f);\n    root.setHeight(400f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(45f);\n    root_child0.setHeightPercent(55f);\n    root_child0.setPositionPercent(YogaEdge.LEFT, 10f);\n    root_child0.setPositionPercent(YogaEdge.TOP, 20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(180f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(260f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(80f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(180f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(220f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_position_bottom_right() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(500f);\n    root.setHeight(500f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(55f);\n    root_child0.setHeightPercent(15f);\n    root_child0.setPositionPercent(YogaEdge.BOTTOM, 10f);\n    root_child0.setPositionPercent(YogaEdge.RIGHT, 20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(275f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(500f, root.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(275f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexBasisPercent(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(125f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_cross() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root_child1.setFlexBasisPercent(25f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(125f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(125f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(75f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_percentage_flex_basis_cross_min_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setMinHeightPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(2f);\n    root_child1.setMinHeightPercent(10f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_main_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(10f);\n    root_child0.setMaxHeightPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(10f);\n    root_child1.setMaxHeightPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(52f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(148f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(148f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(52f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(148f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_cross_max_height() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(10f);\n    root_child0.setMaxHeightPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(10f);\n    root_child1.setMaxHeightPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(120f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_main_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(15f);\n    root_child0.setMaxWidthPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(10f);\n    root_child1.setMaxWidthPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(40f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_cross_max_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(10f);\n    root_child0.setMaxWidthPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(15f);\n    root_child1.setMaxWidthPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(160f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_main_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(15f);\n    root_child0.setMinWidthPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(10f);\n    root_child1.setMinWidthPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(120f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(80f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(120f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(80f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_flex_basis_cross_min_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(10f);\n    root_child0.setMinWidthPercent(60f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(15f);\n    root_child1.setMinWidthPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_multiple_nested_with_padding_margin_and_percentage_values() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(200f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasisPercent(10f);\n    root_child0.setMinWidthPercent(60f);\n    root_child0.setMargin(YogaEdge.ALL, 5f);\n    root_child0.setPadding(YogaEdge.ALL, 3);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(50f);\n    root_child0_child0.setMargin(YogaEdge.ALL, 5f);\n    root_child0_child0.setPaddingPercent(YogaEdge.ALL, 3);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidthPercent(45f);\n    root_child0_child0_child0.setMarginPercent(YogaEdge.ALL, 5f);\n    root_child0_child0_child0.setPadding(YogaEdge.ALL, 3);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(4f);\n    root_child1.setFlexBasisPercent(15f);\n    root_child1.setMinWidthPercent(20f);\n    root.addChildAt(root_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(190f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(48f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(8f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(8f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(92f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(10f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(36f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(6f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(58f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(142f, root_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(5f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(190f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(48f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(8f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(92f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(46f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(36f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(6f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(58f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(142f, root_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_margin_should_calculate_based_only_on_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setMarginPercent(YogaEdge.ALL, 10f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(150f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_padding_should_calculate_based_only_on_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root_child0.setPaddingPercent(YogaEdge.ALL, 10);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(10f);\n    root_child0_child0.setHeight(10f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(20f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(170f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_absolute_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(200f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setPositionPercent(YogaEdge.TOP, 10f);\n    root_child0.setPositionPercent(YogaEdge.LEFT, 30f);\n    root_child0.setWidth(10f);\n    root_child0.setHeight(10f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_width_height_undefined_parent_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeightPercent(50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_within_flex_grow() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setWidth(350f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidthPercent(100f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(100f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(350f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(350f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(250f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(150f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percentage_container_in_wrapping_container() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setAlignItems(YogaAlign.CENTER);\n    root.setWidth(200f);\n    root.setHeight(200f);\n    root.setJustifyContent(YogaJustify.CENTER);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root_child0_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0_child0.setWidthPercent(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidth(50f);\n    root_child0_child0_child1.setHeight(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(75f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_absolute_position() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(50f);\n    root_child0.setWidthPercent(100f);\n    root_child0.setPositionPercent(YogaEdge.LEFT, 50f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidthPercent(100f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setWidthPercent(100f);\n    root_child0.addChildAt(root_child0_child1, 1);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-60f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(60f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_of_minmax_main() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMinWidth(60f);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_percent_of_min_main() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMinWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_percent_of_min_main_multiple() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMinWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidthPercent(50f);\n    root_child1.setHeight(20f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidthPercent(50f);\n    root_child2.setHeight(20f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-30f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_percent_of_max_main() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_of_minmax_cross_stretched() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(60f);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_absolute_of_minmax_cross_stretched() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(60f);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_of_minmax_cross_unstretched() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(60f);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  @Ignore\n  public void test_percent_of_min_cross_unstretched() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMinWidth(60f);\n    root.setHeight(50f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(60f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(30f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(30f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_percent_of_max_cross_unstretched() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setMaxWidth(60f);\n    root.setHeight(50f);\n    root.setAlignItems(YogaAlign.FLEX_START);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidthPercent(50f);\n    root_child0.setHeight(20f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(0f, root.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGRoundingTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<e1d10895d8799d81a66f0c2ef95b661d>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGRoundingTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGRoundingTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_rounding_flex_basis_flex_grow_row_width_of_100() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(33f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(33f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(34f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(67f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(33f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(67f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(33f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(33f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(34f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(33f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_flex_basis_flex_grow_row_prime_number_width() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(113f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n\n    final YogaNode root_child3 = createNode(config);\n    root_child3.setFlexGrow(1f);\n    root.addChildAt(root_child3, 3);\n\n    final YogaNode root_child4 = createNode(config);\n    root_child4.setFlexGrow(1f);\n    root.addChildAt(root_child4, 4);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(113f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(23f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(22f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(68f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(22f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(113f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(90f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(68f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(22f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(45f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(23f, root_child3.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child3.getLayoutY(), 0.0f);\n    assertEquals(22f, root_child3.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child3.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child4.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child4.getLayoutY(), 0.0f);\n    assertEquals(23f, root_child4.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child4.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_flex_basis_flex_shrink_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(101f);\n    root.setHeight(100f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setFlexBasis(100f);\n    root_child0.setFlexShrink(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setFlexBasis(25f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setFlexBasis(25f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(101f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(51f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(51f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(76f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(101f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(51f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(25f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_flex_basis_overrides_main_size() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(113f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_total_fractial() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(113.4f);\n    root.setWidth(87.4f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20.3f);\n    root_child0.setFlexGrow(0.7f);\n    root_child0.setFlexBasis(50.3f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1.6f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10.7f);\n    root_child2.setFlexGrow(1.1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(87f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(59f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(87f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(59f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_total_fractial_nested() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(113.4f);\n    root.setWidth(87.4f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20.3f);\n    root_child0.setFlexGrow(0.7f);\n    root_child0.setFlexBasis(50.3f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPosition(YogaEdge.BOTTOM, 13.3f);\n    root_child0_child0.setHeight(9.9f);\n    root_child0_child0.setFlexGrow(1f);\n    root_child0_child0.setFlexBasis(0.3f);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setPosition(YogaEdge.TOP, 13.3f);\n    root_child0_child1.setHeight(1.1f);\n    root_child0_child1.setFlexGrow(4f);\n    root_child0_child1.setFlexBasis(0.3f);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1.6f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10.7f);\n    root_child2.setFlexGrow(1.1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(87f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(59f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-13f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(12f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(47f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(87f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(59f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-13f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(12f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(25f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(47f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(59f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(30f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(87f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_fractial_input_1() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(113.4f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_fractial_input_2() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(113.6f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(114f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(114f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(65f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_fractial_input_3() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setPosition(YogaEdge.TOP, 0.3f);\n    root.setHeight(113.4f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(114f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(114f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(65f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_fractial_input_4() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setPosition(YogaEdge.TOP, 0.7f);\n    root.setHeight(113.4f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(20f);\n    root_child0.setFlexGrow(1f);\n    root_child0.setFlexBasis(50f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(1f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(1f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(113f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(64f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(64f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(25f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(89f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(24f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_inner_node_controversy_horizontal() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(320f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeight(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setHeight(10f);\n    root_child1_child0.setFlexGrow(1f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeight(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(107f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(107f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(106f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(106f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(213f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(107f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(320f, root.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(213f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(107f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(107f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(106f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(106f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(107f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_inner_node_controversy_vertical() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(320f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(10f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setWidth(10f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidth(10f);\n    root_child1_child0.setFlexGrow(1f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setWidth(10f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(10f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(107f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(10f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(107f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_rounding_inner_node_controversy_combined() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(640f);\n    root.setHeight(320f);\n    root.setFlexDirection(YogaFlexDirection.ROW);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightPercent(100f);\n    root_child0.setFlexGrow(1f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child1 = createNode(config);\n    root_child1.setHeightPercent(100f);\n    root_child1.setFlexGrow(1f);\n    root.addChildAt(root_child1, 1);\n\n    final YogaNode root_child1_child0 = createNode(config);\n    root_child1_child0.setWidthPercent(100f);\n    root_child1_child0.setFlexGrow(1f);\n    root_child1.addChildAt(root_child1_child0, 0);\n\n    final YogaNode root_child1_child1 = createNode(config);\n    root_child1_child1.setWidthPercent(100f);\n    root_child1_child1.setFlexGrow(1f);\n    root_child1.addChildAt(root_child1_child1, 1);\n\n    final YogaNode root_child1_child1_child0 = createNode(config);\n    root_child1_child1_child0.setFlexGrow(1f);\n    root_child1_child1_child0.setWidthPercent(100f);\n    root_child1_child1.addChildAt(root_child1_child1_child0, 0);\n\n    final YogaNode root_child1_child2 = createNode(config);\n    root_child1_child2.setWidthPercent(100f);\n    root_child1_child2.setFlexGrow(1f);\n    root_child1.addChildAt(root_child1_child2, 2);\n\n    final YogaNode root_child2 = createNode(config);\n    root_child2.setHeightPercent(100f);\n    root_child2.setFlexGrow(1f);\n    root.addChildAt(root_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(640f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(213f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(213f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(107f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(427f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(640f, root.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(427f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(213f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(213f, root_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(107f, root_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child1_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(106f, root_child1_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child1_child2.getLayoutX(), 0.0f);\n    assertEquals(213f, root_child1_child2.getLayoutY(), 0.0f);\n    assertEquals(214f, root_child1_child2.getLayoutWidth(), 0.0f);\n    assertEquals(107f, root_child1_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child2.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child2.getLayoutY(), 0.0f);\n    assertEquals(213f, root_child2.getLayoutWidth(), 0.0f);\n    assertEquals(320f, root_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGSizeOverflowTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<1e5af7129e23b9dd1228bdaef498c19c>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGSizeOverflowTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGSizeOverflowTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_nested_overflowing_child() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_nested_overflowing_child_in_constraint_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setHeight(100f);\n    root.setWidth(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeight(100f);\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_parent_wrap_child_size_overflowing_parent() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n    root.setWidth(100f);\n    root.setHeight(100f);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setHeight(200f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/tests/generated/com/facebook/yoga/YGStaticPositionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<2d3b1fc3c172c1d6fe052278ae6daff7>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGStaticPositionTest.html\n */\n\npackage com.facebook.yoga;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\nimport com.facebook.yoga.utils.TestUtils;\n\n@RunWith(Parameterized.class)\npublic class YGStaticPositionTest {\n  @Parameterized.Parameters(name = \"{0}\")\n  public static Iterable<TestParametrization.NodeFactory> nodeFactories() {\n    return TestParametrization.nodeFactories();\n  }\n\n  @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;\n\n  @Test\n  public void test_static_position_insets_have_no_effect_left_top() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0.setPosition(YogaEdge.LEFT, 50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_insets_have_no_effect_right_bottom() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(100f);\n    root_child0.setHeight(100f);\n    root_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.setPosition(YogaEdge.BOTTOM, 50f);\n    root_child0.setPosition(YogaEdge.RIGHT, 50f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_insets_relative_to_positioned_ancestor() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.LEFT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.LEFT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.LEFT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_insets_relative_to_positioned_ancestor_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.ROW);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_insets_relative_to_positioned_ancestor_deep() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 100f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 100f);\n    root_child0_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0_child0.setHeight(100f);\n    root_child0_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 100f);\n    root_child0_child0_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0_child0_child0_child0.setPosition(YogaEdge.TOP, 50f);\n    root_child0_child0_child0_child0_child0_child0.setPosition(YogaEdge.LEFT, 50f);\n    root_child0_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-350f, root_child0_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_width_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_width_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_width_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_height_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_height_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_height_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_left_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_left_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_left_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_right_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.RIGHT, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_right_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.RIGHT, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_right_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.RIGHT, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_top_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_top_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.TOP, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_top_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.TOP, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_bottom_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.BOTTOM, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_bottom_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.BOTTOM, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_bottom_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.BOTTOM, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_margin_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setMarginPercent(YogaEdge.ALL, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_margin_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setMarginPercent(YogaEdge.ALL, 50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_margin_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setMarginPercent(YogaEdge.ALL, 50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_padding_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPaddingPercent(YogaEdge.ALL, 50);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_padding_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPaddingPercent(YogaEdge.ALL, 50);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_padding_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPaddingPercent(YogaEdge.ALL, 50);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_border_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_border_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_border_percentage() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(200f);\n    root_child0.setHeight(200f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidth(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(200f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_containing_block_padding_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_containing_block_padding_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_containing_block_padding_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(50f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(50f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_containing_block_content_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(50f);\n    root_child0_child0.setWidthPercent(50f);\n    root_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_relative_child_containing_block_content_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(50f);\n    root_child0_child0.setWidthPercent(50f);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_child_containing_block_content_box() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(50f);\n    root_child0_child0.setWidthPercent(50f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_containing_block_padding_and_border() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.TOP, 8);\n    root_child0.setPadding(YogaEdge.RIGHT, 1);\n    root_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0.setPadding(YogaEdge.LEFT, 9);\n    root_child0.setBorder(YogaEdge.TOP, 5f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 4f);\n    root_child0.setBorder(YogaEdge.LEFT, 2f);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(61f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(11f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(13f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(239f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(292f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(13f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-60f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(160f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(239f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(500f);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(63f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(1f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(279f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-2f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_no_position_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(500f);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(63f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(279f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-15f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_zero_for_inset_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(500f);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(63f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 0f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-1f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(279f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-265f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_start_inset_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(500f);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(63f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.START, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(11f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(279f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-2f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_end_inset_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(500f);\n    root_child0.setHeight(500f);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(200f);\n    root_child0_child0.setWidth(200f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeightPercent(63f);\n    root_child0_child0_child0.setWidthPercent(41f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPosition(YogaEdge.END, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(270f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(513f, root.getLayoutWidth(), 0.0f);\n    assertEquals(506f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(500f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(279f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-261f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(306f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_row_reverse_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.ROW_REVERSE);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setHeightPercent(12f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-128f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(133f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(23f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(133f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(23f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_column_reverse_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-82f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-15f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(-82f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_justify_flex_start_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(111f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_justify_flex_start_position_set_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 30f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(106f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(106f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_no_definite_size_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 23f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(133f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(133f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_both_insets_set_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setPositionPercent(YogaEdge.LEFT, 23f);\n    root_child0_child0_child0.setPosition(YogaEdge.RIGHT, 13f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(9f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(69f, root.getLayoutWidth(), 0.0f);\n    assertEquals(79f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(56f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(73f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(22f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-3f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_justify_center_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setJustifyContent(YogaJustify.CENTER);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(85f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(111f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(85f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_justify_flex_end_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setJustifyContent(YogaJustify.FLEX_END);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(111f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_align_flex_start_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setAlignItems(YogaAlign.FLEX_START);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(111f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_align_center_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setAlignItems(YogaAlign.CENTER);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(65f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(39f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(65f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(39f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(75f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_align_flex_end_amalgamation() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setMargin(YogaEdge.TOP, 5f);\n    root_child0.setMargin(YogaEdge.RIGHT, 9f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 4f);\n    root_child0.setBorder(YogaEdge.TOP, 6f);\n    root_child0.setBorder(YogaEdge.RIGHT, 7f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 8f);\n    root_child0.setBorder(YogaEdge.LEFT, 5f);\n    root_child0.setPadding(YogaEdge.TOP, 9);\n    root_child0.setPadding(YogaEdge.RIGHT, 11);\n    root_child0.setPadding(YogaEdge.BOTTOM, 13);\n    root_child0.setPadding(YogaEdge.LEFT, 2);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0_child0.setMargin(YogaEdge.TOP, 6f);\n    root_child0_child0.setMargin(YogaEdge.RIGHT, 3f);\n    root_child0_child0.setMargin(YogaEdge.BOTTOM, 9f);\n    root_child0_child0.setMargin(YogaEdge.LEFT, 8f);\n    root_child0_child0.setBorder(YogaEdge.TOP, 10f);\n    root_child0_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0_child0.setBorder(YogaEdge.LEFT, 8f);\n    root_child0_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0_child0.setPadding(YogaEdge.RIGHT, 9);\n    root_child0_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0_child0.setPadding(YogaEdge.LEFT, 1);\n    root_child0_child0.setAlignItems(YogaAlign.FLEX_END);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0_child0.setWidthPercent(21f);\n    root_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0_child0.setWidth(100f);\n    root_child0_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child0_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child0_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child0_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child0.addChildAt(root_child0_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child1 = createNode(config);\n    root_child0_child0_child1.setWidthPercent(10f);\n    root_child0_child0_child1.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child1, 1);\n\n    final YogaNode root_child0_child0_child1_child0 = createNode(config);\n    root_child0_child0_child1_child0.setWidth(100f);\n    root_child0_child0_child1_child0.setHeight(50f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child1_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child1_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child1_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child1.addChildAt(root_child0_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child0_child2 = createNode(config);\n    root_child0_child0_child2.setWidthPercent(10f);\n    root_child0_child0_child2.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0.addChildAt(root_child0_child0_child2, 2);\n\n    final YogaNode root_child0_child0_child2_child0 = createNode(config);\n    root_child0_child0_child2_child0.setWidth(100f);\n    root_child0_child0_child2_child0.setHeight(50f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.TOP, 12f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.RIGHT, 4f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.BOTTOM, 7f);\n    root_child0_child0_child2_child0.setMargin(YogaEdge.LEFT, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.TOP, 1f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.RIGHT, 5f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.BOTTOM, 9f);\n    root_child0_child0_child2_child0.setBorder(YogaEdge.LEFT, 2f);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.TOP, 3);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.RIGHT, 8);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.BOTTOM, 10);\n    root_child0_child0_child2_child0.setPadding(YogaEdge.LEFT, 5);\n    root_child0_child0_child2.addChildAt(root_child0_child0_child2_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(111f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(131f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(215f, root.getLayoutWidth(), 0.0f);\n    assertEquals(301f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(4f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(5f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(202f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(295f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(15f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(21f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(166f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(244f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-77f, root_child0_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(29f, root_child0_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(140f, root_child0_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(20f, root_child0_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(92f, root_child0_child0_child2.getLayoutHeight(), 0.0f);\n\n    assertEquals(-97f, root_child0_child0_child2_child0.getLayoutX(), 0.0f);\n    assertEquals(16f, root_child0_child0_child2_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0_child2_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child2_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_static_root() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setHeight(200f);\n    root.setWidth(100f);\n    root.setPositionType(YogaPositionType.STATIC);\n    root.setPadding(YogaEdge.TOP, 1);\n    root.setPadding(YogaEdge.RIGHT, 11);\n    root.setPadding(YogaEdge.BOTTOM, 4);\n    root.setPadding(YogaEdge.LEFT, 6);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setHeightPercent(50f);\n    root_child0.setWidthPercent(50f);\n    root_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.setBorder(YogaEdge.TOP, 3f);\n    root_child0.setBorder(YogaEdge.RIGHT, 2f);\n    root_child0.setBorder(YogaEdge.BOTTOM, 1f);\n    root_child0.setBorder(YogaEdge.LEFT, 4f);\n    root_child0.setPadding(YogaEdge.TOP, 7);\n    root_child0.setPadding(YogaEdge.RIGHT, 5);\n    root_child0.setPadding(YogaEdge.BOTTOM, 4);\n    root_child0.setPadding(YogaEdge.LEFT, 3);\n    root_child0.setMargin(YogaEdge.TOP, 11f);\n    root_child0.setMargin(YogaEdge.RIGHT, 15f);\n    root_child0.setMargin(YogaEdge.BOTTOM, 1f);\n    root_child0.setMargin(YogaEdge.LEFT, 12f);\n    root.addChildAt(root_child0, 0);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(18f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(12f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(100f, root.getLayoutWidth(), 0.0f);\n    assertEquals(200f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(24f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(12f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(50f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0.getLayoutHeight(), 0.0f);\n  }\n\n  @Test\n  public void test_static_position_absolute_child_multiple() {\n    YogaConfig config = YogaConfigFactory.create();\n\n    final YogaNode root = createNode(config);\n    root.setPositionType(YogaPositionType.ABSOLUTE);\n\n    final YogaNode root_child0 = createNode(config);\n    root_child0.setWidth(400f);\n    root_child0.setHeight(400f);\n    root_child0.setPadding(YogaEdge.ALL, 100);\n    root.addChildAt(root_child0, 0);\n\n    final YogaNode root_child0_child0 = createNode(config);\n    root_child0_child0.setHeight(100f);\n    root_child0_child0.setWidth(100f);\n    root_child0_child0.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child0, 0);\n\n    final YogaNode root_child0_child0_child0 = createNode(config);\n    root_child0_child0_child0.setHeight(50f);\n    root_child0_child0_child0.setWidthPercent(10f);\n    root_child0_child0_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child0.addChildAt(root_child0_child0_child0, 0);\n\n    final YogaNode root_child0_child1 = createNode(config);\n    root_child0_child1.setHeight(100f);\n    root_child0_child1.setWidth(100f);\n    root_child0_child1.setPositionType(YogaPositionType.STATIC);\n    root_child0.addChildAt(root_child0_child1, 1);\n\n    final YogaNode root_child0_child1_child0 = createNode(config);\n    root_child0_child1_child0.setHeight(50f);\n    root_child0_child1_child0.setWidthPercent(50f);\n    root_child0_child1_child0.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child1.addChildAt(root_child0_child1_child0, 0);\n\n    final YogaNode root_child0_child1_child1 = createNode(config);\n    root_child0_child1_child1.setHeight(50f);\n    root_child0_child1_child1.setWidthPercent(50f);\n    root_child0_child1_child1.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0_child1.addChildAt(root_child0_child1_child1, 1);\n\n    final YogaNode root_child0_child2 = createNode(config);\n    root_child0_child2.setHeight(50f);\n    root_child0_child2.setWidth(25f);\n    root_child0_child2.setPositionType(YogaPositionType.ABSOLUTE);\n    root_child0.addChildAt(root_child0_child2, 2);\n    root.setDirection(YogaDirection.LTR);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(100f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n\n    root.setDirection(YogaDirection.RTL);\n    root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n\n    assertEquals(0f, root.getLayoutX(), 0.0f);\n    assertEquals(0f, root.getLayoutY(), 0.0f);\n    assertEquals(400f, root.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root.getLayoutHeight(), 0.0f);\n\n    assertEquals(0f, root_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0.getLayoutY(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutWidth(), 0.0f);\n    assertEquals(400f, root_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(60f, root_child0_child0_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);\n    assertEquals(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child0_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(200f, root_child0_child1.getLayoutX(), 0.0f);\n    assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);\n    assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child1_child0.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1_child0.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1_child0.getLayoutHeight(), 0.0f);\n\n    assertEquals(-100f, root_child0_child1_child1.getLayoutX(), 0.0f);\n    assertEquals(0f, root_child0_child1_child1.getLayoutY(), 0.0f);\n    assertEquals(200f, root_child0_child1_child1.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child1_child1.getLayoutHeight(), 0.0f);\n\n    assertEquals(275f, root_child0_child2.getLayoutX(), 0.0f);\n    assertEquals(100f, root_child0_child2.getLayoutY(), 0.0f);\n    assertEquals(25f, root_child0_child2.getLayoutWidth(), 0.0f);\n    assertEquals(50f, root_child0_child2.getLayoutHeight(), 0.0f);\n  }\n\n  private YogaNode createNode(YogaConfig config) {\n    return mNodeFactory.create(config);\n  }\n}\n"
  },
  {
    "path": "java/yogajni.version",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n{\n  global:\n    JNI_OnLoad;\n  local:\n    *;\n};\n"
  },
  {
    "path": "javascript/.gitignore",
    "content": "/.emsdk\n/binaries\n/build\n/dist\n"
  },
  {
    "path": "javascript/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.13...3.26)\nset(CMAKE_VERBOSE_MAKEFILE on)\nproject(yoga C CXX)\n\nfile(GLOB YOGA_SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/../yoga/*.cpp\n    ${CMAKE_CURRENT_SOURCE_DIR}/../yoga/**/*.cpp)\n\nset(BRIDGE_SOURCES\n    ${CMAKE_CURRENT_SOURCE_DIR}/src/wasm_bridge.c)\n\ninclude_directories(..)\n\nset(CMAKE_CXX_STANDARD 20)\n\nset(COMPILE_OPTIONS\n    -flto\n    -fno-exceptions\n    -fno-rtti\n    -Wno-ignored-attributes\n    -g0\n    -Os\n    \"SHELL:-s STRICT=1\")\n\nadd_compile_options(${COMPILE_OPTIONS})\n\nadd_link_options(\n    ${COMPILE_OPTIONS}\n    \"SHELL:--closure 1\"\n    \"SHELL:--no-entry\"\n    \"SHELL:-s ALLOW_MEMORY_GROWTH=1\"\n    \"SHELL:-s ASSERTIONS=0\"\n    \"SHELL:-s DYNAMIC_EXECUTION=0\"\n    \"SHELL:-s EXPORT_NAME='loadYoga'\"\n    \"SHELL:-s FETCH_SUPPORT_INDEXEDDB=0\"\n    \"SHELL:-s FILESYSTEM=0\"\n    \"SHELL:-s MALLOC='emmalloc'\"\n    \"SHELL:-s MODULARIZE=1\"\n    \"SHELL:-s EXPORT_ES6=1\"\n    \"SHELL:-s WASM=1\"\n    \"SHELL:-s TEXTDECODER=2\"\n    \"SHELL:-s SUPPORT_BIG_ENDIAN=1\"\n    # SINGLE_FILE=1 combined with ENVIRONMENT='web' creates code that works on\n    # both bundlders and Node.\n    \"SHELL:-s SINGLE_FILE=1\"\n    \"SHELL:-s ENVIRONMENT='web'\"\n    \"SHELL:-s EXPORTED_RUNTIME_METHODS=['HEAPF32','HEAP32']\"\n    \"SHELL:-Wl,--export-dynamic\")\n\nadd_library(yogaObjLib OBJECT ${YOGA_SOURCES} ${BRIDGE_SOURCES})\n\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/binaries)\n\nadd_executable(yoga-wasm-base64-esm $<TARGET_OBJECTS:yogaObjLib>)\n"
  },
  {
    "path": "javascript/README.md",
    "content": "# yoga-layout\n\nThis package provides prebuilt WebAssembly bindings for the Yoga layout engine.\n\nSee more at https://yogalayout.dev\n\n## Usage\n\n```ts\nimport {Yoga, Align} from 'yoga-layout';\n\nconst node = Yoga.Node.create();\nnode.setAlignContent(Align.Center);\n```\n\n## Requirements\n\n`yoga-layout` requires a toolchain that supports ES Modules and top-level await.\n\nIf top-level-await is not supported, use the `yoga-layout/load` entry point instead. This requires to load yoga manually:\n\n```ts\nimport {loadYoga, Align} from 'yoga-layout/load';\n\nconst node = (await loadYoga()).Node.create();\nnode.setAlignContent(Align.Center);\n```\n"
  },
  {
    "path": "javascript/babel.config.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nmodule.exports = api => ({\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        targets: [\n          'maintained node versions',\n          '> 0.5%, last 2 versions, Firefox ESR, not dead',\n        ],\n        // Do not transform to another module system\n        modules: false,\n      },\n    ],\n    [\n      '@babel/preset-typescript',\n      {\n        rewriteImportExtensions: api.env('dist'),\n      },\n    ],\n  ],\n});\n"
  },
  {
    "path": "javascript/jest.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport default {\n  setupFiles: ['./jest.setup.js'],\n  testRegex: '/tests/.*\\\\.test\\\\.ts$',\n  extensionsToTreatAsEsm: ['.ts'],\n};\n"
  },
  {
    "path": "javascript/jest.setup.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nObject.defineProperty(globalThis, 'YGBENCHMARK', {\n  get: () => globalThis.test,\n});\n"
  },
  {
    "path": "javascript/just.config.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nconst {\n  argv,\n  cleanTask,\n  logger,\n  jestTask,\n  option,\n  series,\n  spawn,\n  task,\n  tscTask,\n  copyTask,\n} = require('just-scripts');\n\nconst {existsSync} = require('fs');\nconst {readFile, writeFile, rm} = require('fs/promises');\n\nconst {glob} = require('glob');\nconst path = require('path');\nconst which = require('which');\n\nconst node = process.execPath;\n\noption('fix');\n\ntask('clean', cleanTask({paths: ['.emsdk', 'binaries', 'build']}));\n\ntask(\n  'build',\n  series(installEmsdkTask(), emcmakeGenerateTask(), cmakeBuildTask()),\n);\n\ntask(\n  'test',\n  series(\n    'build',\n    jestTask({\n      config: path.join(__dirname, 'jest.config.js'),\n      nodeArgs: ['--experimental-vm-modules'],\n    }),\n  ),\n);\n\ntask('benchmark', series('build', runBenchTask()));\n\ntask('clang-format', clangFormatTask({fix: argv().fix}));\n\ntask('prepack-package-json', async () => {\n  const packageJsonPath = path.join(__dirname, 'package.json');\n  const packageJsonContents = await readFile(packageJsonPath);\n  const packageJson = JSON.parse(packageJsonContents.toString('utf-8'));\n\n  packageJson.main = packageJson.main.replace(\n    /^.\\/src\\/(.*)\\.ts/,\n    './dist/src/$1.js',\n  );\n  packageJson.types = packageJson.main.replace(/(.*)\\.js/, '$1.d.ts');\n\n  recursiveReplace(\n    packageJson.exports,\n    /^.\\/src\\/(.*)\\.ts/,\n    './dist/src/$1.js',\n  );\n\n  await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n});\n\ntask(\n  'prepack',\n  series(\n    'build',\n    copyTask({paths: ['binaries'], dest: 'dist/binaries'}),\n    tscTask({\n      emitDeclarationOnly: true,\n      rootDir: '.',\n      declarationDir: 'dist',\n    }),\n    babelTransformTask({src: 'src', dst: 'dist/src'}),\n    'prepack-package-json',\n  ),\n);\n\nfunction recursiveReplace(obj, pattern, replacement) {\n  for (const [key, value] of Object.entries(obj)) {\n    if (typeof value === 'string') {\n      obj[key] = value.replace(pattern, replacement);\n    } else if (typeof value === 'object' && value != null) {\n      recursiveReplace(value, pattern, replacement);\n    }\n  }\n}\n\nfunction babelTransformTask(opts) {\n  return () => {\n    const args = [\n      opts.src,\n      '--source-maps',\n      '--out-dir',\n      opts.dst,\n      '--extensions',\n      '.js,.cjs,.mjs,.ts,.cts,.mts',\n    ];\n    logger.info(`Transforming \"${path.resolve(opts.src)}\"`);\n\n    return spawn(node, [require.resolve('@babel/cli/bin/babel'), ...args], {\n      cwd: __dirname,\n      env: {\n        // Trigger distribution-specific Babel transforms\n        NODE_ENV: 'dist',\n      },\n    });\n  };\n}\n\nfunction runBenchTask() {\n  return () => {\n    const files = glob.sync('./tests/Benchmarks/**/*');\n\n    const args = [\n      '--loader=babel-register-esm',\n      './tests/bin/run-bench.ts',\n      ...files,\n    ];\n    logger.info(['node', ...args].join(' '));\n\n    return spawn(node, args, {\n      stdio: 'inherit',\n    });\n  };\n}\n\nconst emsdkVersion = '4.0.23';\nconst emsdkPath = path.join(__dirname, '.emsdk');\nconst emsdkBin = path.join(\n  emsdkPath,\n  process.platform === 'win32' ? 'emsdk.bat' : 'emsdk',\n);\nconst emcmakeBin = path.join(\n  emsdkPath,\n  'upstream',\n  'emscripten',\n  process.platform === 'win32' ? 'emcmake.bat' : 'emcmake',\n);\n\nfunction installEmsdkTask() {\n  return async () => {\n    if (await isEmsdkReadyAndActivated()) {\n      logger.verbose(\n        `emsdk ${emsdkVersion} is already installed and activated`,\n      );\n      return false;\n    }\n\n    logger.info(`installing emsdk ${emsdkVersion} to ${emsdkPath}`);\n    await rm(emsdkPath, {recursive: true, force: true});\n\n    await spawn(\n      'git',\n      ['clone', 'https://github.com/emscripten-core/emsdk.git', emsdkPath],\n      {stdio: 'inherit'},\n    );\n\n    await spawnShell(emsdkBin, ['install', emsdkVersion], {stdio: 'inherit'});\n\n    await spawnShell(emsdkBin, ['activate', emsdkVersion], {\n      stdio: logger.enableVerbose ? 'inherit' : 'ignore',\n    });\n  };\n}\n\nasync function isEmsdkReadyAndActivated() {\n  if (!existsSync(emcmakeBin)) {\n    return false;\n  }\n\n  try {\n    const emsdkReleases = JSON.parse(\n      await readFile(path.join(emsdkPath, 'emscripten-releases-tags.json')),\n    ).releases;\n\n    const versionHash = emsdkReleases[emsdkVersion];\n    if (!versionHash) {\n      return false;\n    }\n\n    const activatedVersion = await readFile(\n      path.join(emsdkPath, 'upstream', '.emsdk_version'),\n    );\n\n    return activatedVersion.toString().includes(versionHash);\n  } catch {\n    // Something is wrong. Pave and redo.\n    return false;\n  }\n}\n\nfunction emcmakeGenerateTask() {\n  return () => {\n    logger.verbose(`emcmake path: ${emcmakeBin}`);\n\n    const args = [\n      'cmake',\n      '-S',\n      '.',\n      '-B',\n      'build',\n      ...(process.platform === 'win32' ? [] : ['-G', 'Ninja']),\n    ];\n    logger.info(['emcmake', ...args].join(' '));\n\n    return spawnShell(emcmakeBin, args, {\n      stdio: logger.enableVerbose ? 'inherit' : 'ignore',\n    });\n  };\n}\n\nfunction cmakeBuildTask(opts) {\n  return () => {\n    const cmake = which.sync('cmake');\n    logger.verbose(`cmake path: ${cmake}`);\n\n    const args = [\n      '--build',\n      'build',\n      ...(opts?.targets ? ['--target', ...opts.targets] : []),\n    ];\n    logger.info(['cmake', ...args].join(' '));\n\n    return spawnShell(cmake, args, {stdio: 'inherit'});\n  };\n}\n\nfunction clangFormatTask(opts) {\n  return () => {\n    const args = [\n      ...(opts?.fix ? ['-i'] : ['--dry-run', '--Werror']),\n      ...glob.sync('**/*.{h,hh,hpp,c,cpp,cc,m,mm}'),\n    ];\n    logger.info(['clang-format', ...args].join(' '));\n\n    return spawnShell(node, [require.resolve('clang-format'), ...args], {\n      stdio: 'inherit',\n    });\n  };\n}\n\nfunction spawnShell(cmd, args, opts) {\n  // https://github.com/nodejs/node/issues/52554\n  return spawn(cmd, args, {...opts, shell: true});\n}\n"
  },
  {
    "path": "javascript/package.json",
    "content": "{\n  \"name\": \"yoga-layout\",\n  \"version\": \"0.0.0\",\n  \"description\": \"An embeddable and performant flexbox layout engine with bindings for multiple languages\",\n  \"license\": \"MIT\",\n  \"author\": \"Meta Open Source\",\n  \"homepage\": \"https://yogalayout.dev/\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:facebook/yoga.git\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./src/index.ts\",\n  \"types\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./load\": \"./src/load.ts\"\n  },\n  \"files\": [\n    \"dist/binaries/**\",\n    \"dist/src/**\",\n    \"src/**\"\n  ],\n  \"scripts\": {\n    \"benchmark\": \"just benchmark --config just.config.cjs\",\n    \"build\": \"just build --config just.config.cjs\",\n    \"clang-format\": \"just clang-format --config just.config.cjs\",\n    \"clang-format:fix\": \"just clang-format --fix --config just.config.cjs\",\n    \"clean\": \"just clean --config just.config.cjs\",\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\",\n    \"prepack\": \"just prepack --config just.config.cjs\",\n    \"test\": \"just test --config just.config.cjs\",\n    \"tsc\": \"tsc --noEmit\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.23.0\",\n    \"@babel/core\": \"^7.23.0\",\n    \"@babel/preset-env\": \"^7.23.0\",\n    \"@babel/preset-typescript\": \"^7.23.0\",\n    \"@types/jest\": \"^29.5.1\",\n    \"@types/node\": \"^16.18.25\",\n    \"@types/which\": \"^3.0.0\",\n    \"@yogalayout/cmake-bin\": \"3.28.0-1\",\n    \"babel-register-esm\": \"^1.2.5\",\n    \"clang-format\": \"^1.8.0\",\n    \"glob\": \"^10.4.2\",\n    \"jest\": \"^29.3.1\",\n    \"just-scripts\": \"^2.1.0\",\n    \"ninja-binaries\": \"^1.11.1\",\n    \"which\": \"^3.0.0\"\n  }\n}\n"
  },
  {
    "path": "javascript/src/generated/YGEnums.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n  Auto = 0,\n  FlexStart = 1,\n  Center = 2,\n  FlexEnd = 3,\n  Stretch = 4,\n  Baseline = 5,\n  SpaceBetween = 6,\n  SpaceAround = 7,\n  SpaceEvenly = 8,\n  Start = 9,\n  End = 10,\n}\n\nexport enum BoxSizing {\n  BorderBox = 0,\n  ContentBox = 1,\n}\n\nexport enum Dimension {\n  Width = 0,\n  Height = 1,\n}\n\nexport enum Direction {\n  Inherit = 0,\n  LTR = 1,\n  RTL = 2,\n}\n\nexport enum Display {\n  Flex = 0,\n  None = 1,\n  Contents = 2,\n  Grid = 3,\n}\n\nexport enum Edge {\n  Left = 0,\n  Top = 1,\n  Right = 2,\n  Bottom = 3,\n  Start = 4,\n  End = 5,\n  Horizontal = 6,\n  Vertical = 7,\n  All = 8,\n}\n\nexport enum Errata {\n  None = 0,\n  StretchFlexBasis = 1,\n  AbsolutePositionWithoutInsetsExcludesPadding = 2,\n  AbsolutePercentAgainstInnerSize = 4,\n  All = 2147483647,\n  Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n  WebFlexBasis = 0,\n  FixFlexBasisFitContent = 1,\n}\n\nexport enum FlexDirection {\n  Column = 0,\n  ColumnReverse = 1,\n  Row = 2,\n  RowReverse = 3,\n}\n\nexport enum GridTrackType {\n  Auto = 0,\n  Points = 1,\n  Percent = 2,\n  Fr = 3,\n  Minmax = 4,\n}\n\nexport enum Gutter {\n  Column = 0,\n  Row = 1,\n  All = 2,\n}\n\nexport enum Justify {\n  Auto = 0,\n  FlexStart = 1,\n  Center = 2,\n  FlexEnd = 3,\n  SpaceBetween = 4,\n  SpaceAround = 5,\n  SpaceEvenly = 6,\n  Stretch = 7,\n  Start = 8,\n  End = 9,\n}\n\nexport enum LogLevel {\n  Error = 0,\n  Warn = 1,\n  Info = 2,\n  Debug = 3,\n  Verbose = 4,\n  Fatal = 5,\n}\n\nexport enum MeasureMode {\n  Undefined = 0,\n  Exactly = 1,\n  AtMost = 2,\n}\n\nexport enum NodeType {\n  Default = 0,\n  Text = 1,\n}\n\nexport enum Overflow {\n  Visible = 0,\n  Hidden = 1,\n  Scroll = 2,\n}\n\nexport enum PositionType {\n  Static = 0,\n  Relative = 1,\n  Absolute = 2,\n}\n\nexport enum Unit {\n  Undefined = 0,\n  Point = 1,\n  Percent = 2,\n  Auto = 3,\n  MaxContent = 4,\n  FitContent = 5,\n  Stretch = 6,\n}\n\nexport enum Wrap {\n  NoWrap = 0,\n  Wrap = 1,\n  WrapReverse = 2,\n}\n\nconst constants = {\n  ALIGN_AUTO: Align.Auto,\n  ALIGN_FLEX_START: Align.FlexStart,\n  ALIGN_CENTER: Align.Center,\n  ALIGN_FLEX_END: Align.FlexEnd,\n  ALIGN_STRETCH: Align.Stretch,\n  ALIGN_BASELINE: Align.Baseline,\n  ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n  ALIGN_SPACE_AROUND: Align.SpaceAround,\n  ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n  ALIGN_START: Align.Start,\n  ALIGN_END: Align.End,\n  BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n  BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n  DIMENSION_WIDTH: Dimension.Width,\n  DIMENSION_HEIGHT: Dimension.Height,\n  DIRECTION_INHERIT: Direction.Inherit,\n  DIRECTION_LTR: Direction.LTR,\n  DIRECTION_RTL: Direction.RTL,\n  DISPLAY_FLEX: Display.Flex,\n  DISPLAY_NONE: Display.None,\n  DISPLAY_CONTENTS: Display.Contents,\n  DISPLAY_GRID: Display.Grid,\n  EDGE_LEFT: Edge.Left,\n  EDGE_TOP: Edge.Top,\n  EDGE_RIGHT: Edge.Right,\n  EDGE_BOTTOM: Edge.Bottom,\n  EDGE_START: Edge.Start,\n  EDGE_END: Edge.End,\n  EDGE_HORIZONTAL: Edge.Horizontal,\n  EDGE_VERTICAL: Edge.Vertical,\n  EDGE_ALL: Edge.All,\n  ERRATA_NONE: Errata.None,\n  ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n  ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n  ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n  ERRATA_ALL: Errata.All,\n  ERRATA_CLASSIC: Errata.Classic,\n  EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n  EXPERIMENTAL_FEATURE_FIX_FLEX_BASIS_FIT_CONTENT: ExperimentalFeature.FixFlexBasisFitContent,\n  FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n  FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n  FLEX_DIRECTION_ROW: FlexDirection.Row,\n  FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n  GRID_TRACK_TYPE_AUTO: GridTrackType.Auto,\n  GRID_TRACK_TYPE_POINTS: GridTrackType.Points,\n  GRID_TRACK_TYPE_PERCENT: GridTrackType.Percent,\n  GRID_TRACK_TYPE_FR: GridTrackType.Fr,\n  GRID_TRACK_TYPE_MINMAX: GridTrackType.Minmax,\n  GUTTER_COLUMN: Gutter.Column,\n  GUTTER_ROW: Gutter.Row,\n  GUTTER_ALL: Gutter.All,\n  JUSTIFY_AUTO: Justify.Auto,\n  JUSTIFY_FLEX_START: Justify.FlexStart,\n  JUSTIFY_CENTER: Justify.Center,\n  JUSTIFY_FLEX_END: Justify.FlexEnd,\n  JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n  JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n  JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n  JUSTIFY_STRETCH: Justify.Stretch,\n  JUSTIFY_START: Justify.Start,\n  JUSTIFY_END: Justify.End,\n  LOG_LEVEL_ERROR: LogLevel.Error,\n  LOG_LEVEL_WARN: LogLevel.Warn,\n  LOG_LEVEL_INFO: LogLevel.Info,\n  LOG_LEVEL_DEBUG: LogLevel.Debug,\n  LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n  LOG_LEVEL_FATAL: LogLevel.Fatal,\n  MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n  MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n  MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n  NODE_TYPE_DEFAULT: NodeType.Default,\n  NODE_TYPE_TEXT: NodeType.Text,\n  OVERFLOW_VISIBLE: Overflow.Visible,\n  OVERFLOW_HIDDEN: Overflow.Hidden,\n  OVERFLOW_SCROLL: Overflow.Scroll,\n  POSITION_TYPE_STATIC: PositionType.Static,\n  POSITION_TYPE_RELATIVE: PositionType.Relative,\n  POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n  UNIT_UNDEFINED: Unit.Undefined,\n  UNIT_POINT: Unit.Point,\n  UNIT_PERCENT: Unit.Percent,\n  UNIT_AUTO: Unit.Auto,\n  UNIT_MAX_CONTENT: Unit.MaxContent,\n  UNIT_FIT_CONTENT: Unit.FitContent,\n  UNIT_STRETCH: Unit.Stretch,\n  WRAP_NO_WRAP: Wrap.NoWrap,\n  WRAP_WRAP: Wrap.Wrap,\n  WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants"
  },
  {
    "path": "javascript/src/index.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n  Config,\n  DirtiedFunction,\n  MeasureFunction,\n  Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n"
  },
  {
    "path": "javascript/src/load.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYogaImpl from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n  Config,\n  DirtiedFunction,\n  MeasureFunction,\n  Node,\n  Yoga,\n} from './wrapAssembly.ts';\n\nexport async function loadYoga() {\n  return wrapAssembly(await loadYogaImpl());\n}\nexport * from './generated/YGEnums.ts';\n"
  },
  {
    "path": "javascript/src/wasm_bridge.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <emscripten/emscripten.h>\n#include <yoga/Yoga.h>\n\n// Static buffer for returning YGValue structs to JS.\n// JS reads buf[0] as float (value) and buf[1] as int (unit) via HEAPF32/HEAP32.\n// Safe because WASM is single-threaded.\nstatic float ygvalue_buf[2];\n\nstatic void writeYGValue(YGValue v) {\n  ygvalue_buf[0] = v.value;\n  // Store unit as integer bits in a float slot; JS reads via HEAP32.\n  ((int*)ygvalue_buf)[1] = (int)v.unit;\n}\n\nEMSCRIPTEN_KEEPALIVE float* jswrap_YGValueBuffer(void) {\n  return ygvalue_buf;\n}\n\n// --- YGValue getter wrappers ---\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetWidth(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetWidth(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetHeight(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetHeight(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetPosition(\n    YGNodeConstRef node,\n    YGEdge edge) {\n  writeYGValue(YGNodeStyleGetPosition(node, edge));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetMargin(\n    YGNodeConstRef node,\n    YGEdge edge) {\n  writeYGValue(YGNodeStyleGetMargin(node, edge));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetPadding(\n    YGNodeConstRef node,\n    YGEdge edge) {\n  writeYGValue(YGNodeStyleGetPadding(node, edge));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetFlexBasis(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetFlexBasis(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetMinWidth(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetMinWidth(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetMinHeight(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetMinHeight(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetMaxWidth(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetMaxWidth(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetMaxHeight(YGNodeConstRef node) {\n  writeYGValue(YGNodeStyleGetMaxHeight(node));\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeStyleGetGap(\n    YGNodeConstRef node,\n    YGGutter gutter) {\n  writeYGValue(YGNodeStyleGetGap(node, gutter));\n}\n\n// --- Measure callback bridge ---\n// Uses EM_JS to call into a JS-side Map<nodePtr, callback> stored on Module.\n\nEM_JS(\n    float,\n    callMeasureFunc,\n    (YGNodeConstRef nodePtr,\n     float width,\n     int widthMode,\n     float height,\n     int heightMode,\n     int returnWidthOrHeight),\n    {\n      // clang-format off\n      var fn = Module[\"_yogaMeasureFuncs\"].get(nodePtr);\n      if (!fn)\n        return 0;\n      if (!fn._cachedResult || fn._cachedWidth !== width || fn._cachedWidthMode !== widthMode || fn._cachedHeight !== height || fn._cachedHeightMode !== heightMode) {\n        fn._cachedResult = fn(width, widthMode, height, heightMode);\n        fn._cachedWidth = width;\n        fn._cachedWidthMode = widthMode;\n        fn._cachedHeight = height;\n        fn._cachedHeightMode = heightMode;\n      }\n      var result = fn._cachedResult;\n      if (returnWidthOrHeight === 0) {\n        var w = result.width;\n        return (w === undefined || w === null) ? NaN : +w;\n      } else {\n        var h = result.height;\n        return (h === undefined || h === null) ? NaN : +h;\n      }\n      // clang-format on\n    });\n\nstatic YGSize globalMeasureFunc(\n    YGNodeConstRef nodeRef,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  YGSize size;\n  size.width = callMeasureFunc(\n      nodeRef, width, (int)widthMode, height, (int)heightMode, 0);\n  size.height = callMeasureFunc(\n      nodeRef, width, (int)widthMode, height, (int)heightMode, 1);\n  return size;\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeSetMeasureFunc(YGNodeRef node) {\n  YGNodeSetMeasureFunc(node, &globalMeasureFunc);\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeUnsetMeasureFunc(YGNodeRef node) {\n  YGNodeSetMeasureFunc(node, NULL);\n}\n\n// --- Dirtied callback bridge ---\n\nEM_JS(void, callDirtiedFunc, (YGNodeConstRef nodePtr), {\n  var fn = Module[\"_yogaDirtiedFuncs\"].get(nodePtr);\n  if (fn)\n    fn();\n});\n\nstatic void globalDirtiedFunc(YGNodeConstRef nodeRef) {\n  callDirtiedFunc(nodeRef);\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeSetDirtiedFunc(YGNodeRef node) {\n  YGNodeSetDirtiedFunc(node, &globalDirtiedFunc);\n}\n\nEMSCRIPTEN_KEEPALIVE void jswrap_YGNodeUnsetDirtiedFunc(YGNodeRef node) {\n  YGNodeSetDirtiedFunc(node, NULL);\n}\n"
  },
  {
    "path": "javascript/src/wrapAssembly.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n  Align,\n  BoxSizing,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n  left: number;\n  right: number;\n  top: number;\n  bottom: number;\n  width: number;\n  height: number;\n};\n\ntype Size = {\n  width: number;\n  height: number;\n};\n\ntype Value = {\n  unit: Unit;\n  value: number;\n};\n\nexport type Config = {\n  isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n  setExperimentalFeatureEnabled(\n    feature: ExperimentalFeature,\n    enabled: boolean,\n  ): void;\n  setPointScaleFactor(factor: number): void;\n  getErrata(): Errata;\n  setErrata(errata: Errata): void;\n  useWebDefaults(): boolean;\n  setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n  width: number,\n  widthMode: MeasureMode,\n  height: number,\n  heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n  calculateLayout(\n    width: number | 'auto' | undefined,\n    height: number | 'auto' | undefined,\n    direction?: Direction,\n  ): void;\n  copyStyle(node: Node): void;\n  getAlignContent(): Align;\n  getAlignItems(): Align;\n  getAlignSelf(): Align;\n  getAspectRatio(): number;\n  getBorder(edge: Edge): number;\n  getChild(index: number): Node;\n  getChildCount(): number;\n  getComputedBorder(edge: Edge): number;\n  getComputedBottom(): number;\n  getComputedHeight(): number;\n  getComputedLayout(): Layout;\n  getComputedLeft(): number;\n  getComputedMargin(edge: Edge): number;\n  getComputedPadding(edge: Edge): number;\n  getComputedRight(): number;\n  getComputedTop(): number;\n  getComputedWidth(): number;\n  getDirection(): Direction;\n  getDisplay(): Display;\n  getFlexBasis(): Value;\n  getFlexDirection(): FlexDirection;\n  getFlexGrow(): number;\n  getFlexShrink(): number;\n  getFlexWrap(): Wrap;\n  getHeight(): Value;\n  getJustifyContent(): Justify;\n  getGap(gutter: Gutter): Value;\n  getMargin(edge: Edge): Value;\n  getMaxHeight(): Value;\n  getMaxWidth(): Value;\n  getMinHeight(): Value;\n  getMinWidth(): Value;\n  getOverflow(): Overflow;\n  getPadding(edge: Edge): Value;\n  getParent(): Node | null;\n  getPosition(edge: Edge): Value;\n  getPositionType(): PositionType;\n  getBoxSizing(): BoxSizing;\n  getWidth(): Value;\n  insertChild(child: Node, index: number): void;\n  isDirty(): boolean;\n  isReferenceBaseline(): boolean;\n  markDirty(): void;\n  hasNewLayout(): boolean;\n  markLayoutSeen(): void;\n  removeChild(child: Node): void;\n  reset(): void;\n  setAlignContent(alignContent: Align): void;\n  setAlignItems(alignItems: Align): void;\n  setAlignSelf(alignSelf: Align): void;\n  setAspectRatio(aspectRatio: number | undefined): void;\n  setBorder(edge: Edge, borderWidth: number | undefined): void;\n  setDirection(direction: Direction): void;\n  setDisplay(display: Display): void;\n  setFlex(flex: number | undefined): void;\n  setFlexBasis(\n    flexBasis:\n      | number\n      | 'auto'\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setFlexBasisPercent(flexBasis: number | undefined): void;\n  setFlexBasisAuto(): void;\n  setFlexBasisFitContent(): void;\n  setFlexBasisMaxContent(): void;\n  setFlexBasisStretch(): void;\n  setFlexDirection(flexDirection: FlexDirection): void;\n  setFlexGrow(flexGrow: number | undefined): void;\n  setFlexShrink(flexShrink: number | undefined): void;\n  setFlexWrap(flexWrap: Wrap): void;\n  setHeight(\n    height:\n      | number\n      | 'auto'\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n  setHeightAuto(): void;\n  setHeightFitContent(): void;\n  setHeightMaxContent(): void;\n  setHeightPercent(height: number | undefined): void;\n  setHeightStretch(): void;\n  setJustifyContent(justifyContent: Justify): void;\n  setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n  setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n  setMargin(\n    edge: Edge,\n    margin: number | 'auto' | `${number}%` | undefined,\n  ): void;\n  setMarginAuto(edge: Edge): void;\n  setMarginPercent(edge: Edge, margin: number | undefined): void;\n  setMaxHeight(\n    maxHeight:\n      | number\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setMaxHeightFitContent(): void;\n  setMaxHeightMaxContent(): void;\n  setMaxHeightPercent(maxHeight: number | undefined): void;\n  setMaxHeightStretch(): void;\n  setMaxWidth(\n    maxWidth:\n      | number\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setMaxWidthFitContent(): void;\n  setMaxWidthMaxContent(): void;\n  setMaxWidthPercent(maxWidth: number | undefined): void;\n  setMaxWidthStretch(): void;\n  setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n  setMeasureFunc(measureFunc: MeasureFunction | null): void;\n  setMinHeight(\n    minHeight:\n      | number\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setMinHeightFitContent(): void;\n  setMinHeightMaxContent(): void;\n  setMinHeightPercent(minHeight: number | undefined): void;\n  setMinHeightStretch(): void;\n  setMinWidth(\n    minWidth:\n      | number\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setMinWidthFitContent(): void;\n  setMinWidthMaxContent(): void;\n  setMinWidthPercent(minWidth: number | undefined): void;\n  setMinWidthStretch(): void;\n  setOverflow(overflow: Overflow): void;\n  setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n  setPaddingPercent(edge: Edge, padding: number | undefined): void;\n  setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n  setPositionPercent(edge: Edge, position: number | undefined): void;\n  setPositionType(positionType: PositionType): void;\n  setPositionAuto(edge: Edge): void;\n  setBoxSizing(boxSizing: BoxSizing): void;\n  setWidth(\n    width:\n      | number\n      | 'auto'\n      | 'fit-content'\n      | 'max-content'\n      | 'stretch'\n      | `${number}%`\n      | undefined,\n  ): void;\n  setWidthAuto(): void;\n  setWidthFitContent(): void;\n  setWidthMaxContent(): void;\n  setWidthPercent(width: number | undefined): void;\n  setWidthStretch(): void;\n  unsetDirtiedFunc(): void;\n  unsetMeasureFunc(): void;\n  setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n  Config: {\n    create(): Config;\n  };\n  Node: {\n    create(config?: Config): Node;\n    createDefault(): Node;\n    createWithConfig(config: Config): Node;\n  };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n  // Pointer to the static YGValue return buffer (2 floats = 8 bytes).\n  const valueBufPtr = lib._jswrap_YGValueBuffer();\n  // Byte offset into HEAPF32 (4 bytes per float).\n  const valueBufIdx = valueBufPtr >> 2;\n\n  // Callback maps stored on Module for EM_JS access.\n  lib._yogaMeasureFuncs = new Map();\n  lib._yogaDirtiedFuncs = new Map();\n\n  function readYGValue(): Value {\n    return {\n      value: lib.HEAPF32[valueBufIdx],\n      unit: lib.HEAP32[valueBufIdx + 1],\n    };\n  }\n\n  // --- Polymorphic setter dispatch ---\n  // wasmPointFn is the direct WASM function for Point values, to avoid\n  // infinite recursion (since e.g. setWidth is both the polymorphic entry\n  // point AND what would resolve for Point suffix '').\n  function dispatchSetter(fnName, wasmPointFn, args) {\n    const value = args.pop();\n    let unit, asNumber;\n\n    if (value === 'auto') {\n      unit = Unit.Auto;\n      asNumber = undefined;\n    } else if (value === 'max-content') {\n      unit = Unit.MaxContent;\n      asNumber = undefined;\n    } else if (value === 'fit-content') {\n      unit = Unit.FitContent;\n      asNumber = undefined;\n    } else if (value === 'stretch') {\n      unit = Unit.Stretch;\n      asNumber = undefined;\n    } else if (typeof value === 'object') {\n      unit = value.unit;\n      asNumber = value.valueOf();\n    } else {\n      unit =\n        typeof value === 'string' && value.endsWith('%')\n          ? Unit.Percent\n          : Unit.Point;\n      asNumber = parseFloat(value);\n      if (\n        value !== undefined &&\n        !Number.isNaN(value) &&\n        Number.isNaN(asNumber)\n      ) {\n        throw new Error(`Invalid value ${value} for ${fnName}`);\n      }\n    }\n\n    if (unit === Unit.Point) {\n      if (asNumber !== undefined) {\n        return wasmPointFn(this._ptr, ...args, asNumber);\n      } else {\n        return wasmPointFn(this._ptr, ...args);\n      }\n    }\n\n    const suffix = {\n      [Unit.Percent]: 'Percent',\n      [Unit.Auto]: 'Auto',\n      [Unit.MaxContent]: 'MaxContent',\n      [Unit.FitContent]: 'FitContent',\n      [Unit.Stretch]: 'Stretch',\n    }[unit];\n\n    if (suffix === undefined) {\n      throw new Error(\n        `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n      );\n    }\n\n    const method = this[`${fnName}${suffix}`];\n    if (!method) {\n      throw new Error(\n        `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n      );\n    }\n\n    if (asNumber !== undefined) {\n      return method.call(this, ...args, asNumber);\n    } else {\n      return method.call(this, ...args);\n    }\n  }\n\n  // --- FinalizationRegistry for automatic cleanup ---\n  const configRegistry = new FinalizationRegistry((ptr: number) => {\n    lib._YGConfigFree(ptr);\n  });\n\n  const nodeRegistry = new FinalizationRegistry((ptr: number) => {\n    lib._yogaMeasureFuncs.delete(ptr);\n    lib._yogaDirtiedFuncs.delete(ptr);\n    lib._YGNodeFinalize(ptr);\n  });\n\n  // --- Config class ---\n  class ConfigImpl {\n    _ptr: number;\n\n    constructor(ptr: number) {\n      this._ptr = ptr;\n      configRegistry.register(this, ptr, this);\n    }\n\n    setExperimentalFeatureEnabled(\n      feature: ExperimentalFeature,\n      enabled: boolean,\n    ): void {\n      lib._YGConfigSetExperimentalFeatureEnabled(\n        this._ptr,\n        feature,\n        enabled ? 1 : 0,\n      );\n    }\n\n    isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean {\n      return !!lib._YGConfigIsExperimentalFeatureEnabled(this._ptr, feature);\n    }\n\n    setPointScaleFactor(factor: number): void {\n      lib._YGConfigSetPointScaleFactor(this._ptr, factor);\n    }\n\n    getErrata(): Errata {\n      return lib._YGConfigGetErrata(this._ptr);\n    }\n\n    setErrata(errata: Errata): void {\n      lib._YGConfigSetErrata(this._ptr, errata);\n    }\n\n    useWebDefaults(): boolean {\n      return !!lib._YGConfigGetUseWebDefaults(this._ptr);\n    }\n\n    setUseWebDefaults(useWebDefaults: boolean): void {\n      lib._YGConfigSetUseWebDefaults(this._ptr, useWebDefaults ? 1 : 0);\n    }\n  }\n\n  // --- Node class ---\n  class NodeImpl {\n    _ptr: number;\n    _children: NodeImpl[];\n    _parent: NodeImpl | null;\n\n    constructor(ptr: number) {\n      this._ptr = ptr;\n      this._children = [];\n      this._parent = null;\n      nodeRegistry.register(this, ptr, this);\n    }\n\n    // --- Tree hierarchy ---\n    insertChild(child: NodeImpl, index: number): void {\n      lib._YGNodeInsertChild(this._ptr, child._ptr, index);\n      this._children.splice(index, 0, child);\n      child._parent = this;\n    }\n\n    removeChild(child: NodeImpl): void {\n      lib._YGNodeRemoveChild(this._ptr, child._ptr);\n      const idx = this._children.indexOf(child);\n      if (idx !== -1) {\n        this._children.splice(idx, 1);\n      }\n      child._parent = null;\n    }\n\n    getChildCount(): number {\n      return this._children.length;\n    }\n\n    getChild(index: number): NodeImpl {\n      return this._children[index];\n    }\n\n    getParent(): NodeImpl | null {\n      return this._parent;\n    }\n\n    // --- Lifecycle ---\n    reset(): void {\n      lib._yogaMeasureFuncs.delete(this._ptr);\n      lib._yogaDirtiedFuncs.delete(this._ptr);\n      this._children = [];\n      this._parent = null;\n      lib._YGNodeReset(this._ptr);\n    }\n\n    // --- Style setters ---\n    copyStyle(other: NodeImpl): void {\n      lib._YGNodeCopyStyle(this._ptr, other._ptr);\n    }\n\n    setPositionType(positionType: PositionType): void {\n      lib._YGNodeStyleSetPositionType(this._ptr, positionType);\n    }\n\n    setPosition(edge: Edge, position): void {\n      dispatchSetter.call(this, 'setPosition', lib._YGNodeStyleSetPosition, [\n        edge,\n        position,\n      ]);\n    }\n\n    setPositionPercent(edge: Edge, position: number): void {\n      lib._YGNodeStyleSetPositionPercent(this._ptr, edge, position);\n    }\n\n    setPositionAuto(edge: Edge): void {\n      lib._YGNodeStyleSetPositionAuto(this._ptr, edge);\n    }\n\n    setAlignContent(alignContent: Align): void {\n      lib._YGNodeStyleSetAlignContent(this._ptr, alignContent);\n    }\n\n    setAlignItems(alignItems: Align): void {\n      lib._YGNodeStyleSetAlignItems(this._ptr, alignItems);\n    }\n\n    setAlignSelf(alignSelf: Align): void {\n      lib._YGNodeStyleSetAlignSelf(this._ptr, alignSelf);\n    }\n\n    setFlexDirection(flexDirection: FlexDirection): void {\n      lib._YGNodeStyleSetFlexDirection(this._ptr, flexDirection);\n    }\n\n    setFlexWrap(flexWrap: Wrap): void {\n      lib._YGNodeStyleSetFlexWrap(this._ptr, flexWrap);\n    }\n\n    setJustifyContent(justifyContent: Justify): void {\n      lib._YGNodeStyleSetJustifyContent(this._ptr, justifyContent);\n    }\n\n    setDirection(direction: Direction): void {\n      lib._YGNodeStyleSetDirection(this._ptr, direction);\n    }\n\n    setMargin(edge: Edge, margin): void {\n      dispatchSetter.call(this, 'setMargin', lib._YGNodeStyleSetMargin, [\n        edge,\n        margin,\n      ]);\n    }\n\n    setMarginPercent(edge: Edge, margin: number): void {\n      lib._YGNodeStyleSetMarginPercent(this._ptr, edge, margin);\n    }\n\n    setMarginAuto(edge: Edge): void {\n      lib._YGNodeStyleSetMarginAuto(this._ptr, edge);\n    }\n\n    setOverflow(overflow: Overflow): void {\n      lib._YGNodeStyleSetOverflow(this._ptr, overflow);\n    }\n\n    setDisplay(display: Display): void {\n      lib._YGNodeStyleSetDisplay(this._ptr, display);\n    }\n\n    setFlex(flex: number): void {\n      lib._YGNodeStyleSetFlex(this._ptr, flex);\n    }\n\n    setFlexBasis(flexBasis): void {\n      dispatchSetter.call(this, 'setFlexBasis', lib._YGNodeStyleSetFlexBasis, [\n        flexBasis,\n      ]);\n    }\n\n    setFlexBasisPercent(flexBasis: number): void {\n      lib._YGNodeStyleSetFlexBasisPercent(this._ptr, flexBasis);\n    }\n\n    setFlexBasisAuto(): void {\n      lib._YGNodeStyleSetFlexBasisAuto(this._ptr);\n    }\n\n    setFlexBasisMaxContent(): void {\n      lib._YGNodeStyleSetFlexBasisMaxContent(this._ptr);\n    }\n\n    setFlexBasisFitContent(): void {\n      lib._YGNodeStyleSetFlexBasisFitContent(this._ptr);\n    }\n\n    setFlexBasisStretch(): void {\n      lib._YGNodeStyleSetFlexBasisStretch(this._ptr);\n    }\n\n    setFlexGrow(flexGrow: number): void {\n      lib._YGNodeStyleSetFlexGrow(this._ptr, flexGrow);\n    }\n\n    setFlexShrink(flexShrink: number): void {\n      lib._YGNodeStyleSetFlexShrink(this._ptr, flexShrink);\n    }\n\n    setWidth(width): void {\n      dispatchSetter.call(this, 'setWidth', lib._YGNodeStyleSetWidth, [width]);\n    }\n\n    setWidthPercent(width: number): void {\n      lib._YGNodeStyleSetWidthPercent(this._ptr, width);\n    }\n\n    setWidthAuto(): void {\n      lib._YGNodeStyleSetWidthAuto(this._ptr);\n    }\n\n    setWidthMaxContent(): void {\n      lib._YGNodeStyleSetWidthMaxContent(this._ptr);\n    }\n\n    setWidthFitContent(): void {\n      lib._YGNodeStyleSetWidthFitContent(this._ptr);\n    }\n\n    setWidthStretch(): void {\n      lib._YGNodeStyleSetWidthStretch(this._ptr);\n    }\n\n    setHeight(height): void {\n      dispatchSetter.call(this, 'setHeight', lib._YGNodeStyleSetHeight, [\n        height,\n      ]);\n    }\n\n    setHeightPercent(height: number): void {\n      lib._YGNodeStyleSetHeightPercent(this._ptr, height);\n    }\n\n    setHeightAuto(): void {\n      lib._YGNodeStyleSetHeightAuto(this._ptr);\n    }\n\n    setHeightMaxContent(): void {\n      lib._YGNodeStyleSetHeightMaxContent(this._ptr);\n    }\n\n    setHeightFitContent(): void {\n      lib._YGNodeStyleSetHeightFitContent(this._ptr);\n    }\n\n    setHeightStretch(): void {\n      lib._YGNodeStyleSetHeightStretch(this._ptr);\n    }\n\n    setMinWidth(minWidth): void {\n      dispatchSetter.call(this, 'setMinWidth', lib._YGNodeStyleSetMinWidth, [\n        minWidth,\n      ]);\n    }\n\n    setMinWidthPercent(minWidth: number): void {\n      lib._YGNodeStyleSetMinWidthPercent(this._ptr, minWidth);\n    }\n\n    setMinWidthMaxContent(): void {\n      lib._YGNodeStyleSetMinWidthMaxContent(this._ptr);\n    }\n\n    setMinWidthFitContent(): void {\n      lib._YGNodeStyleSetMinWidthFitContent(this._ptr);\n    }\n\n    setMinWidthStretch(): void {\n      lib._YGNodeStyleSetMinWidthStretch(this._ptr);\n    }\n\n    setMinHeight(minHeight): void {\n      dispatchSetter.call(this, 'setMinHeight', lib._YGNodeStyleSetMinHeight, [\n        minHeight,\n      ]);\n    }\n\n    setMinHeightPercent(minHeight: number): void {\n      lib._YGNodeStyleSetMinHeightPercent(this._ptr, minHeight);\n    }\n\n    setMinHeightMaxContent(): void {\n      lib._YGNodeStyleSetMinHeightMaxContent(this._ptr);\n    }\n\n    setMinHeightFitContent(): void {\n      lib._YGNodeStyleSetMinHeightFitContent(this._ptr);\n    }\n\n    setMinHeightStretch(): void {\n      lib._YGNodeStyleSetMinHeightStretch(this._ptr);\n    }\n\n    setMaxWidth(maxWidth): void {\n      dispatchSetter.call(this, 'setMaxWidth', lib._YGNodeStyleSetMaxWidth, [\n        maxWidth,\n      ]);\n    }\n\n    setMaxWidthPercent(maxWidth: number): void {\n      lib._YGNodeStyleSetMaxWidthPercent(this._ptr, maxWidth);\n    }\n\n    setMaxWidthMaxContent(): void {\n      lib._YGNodeStyleSetMaxWidthMaxContent(this._ptr);\n    }\n\n    setMaxWidthFitContent(): void {\n      lib._YGNodeStyleSetMaxWidthFitContent(this._ptr);\n    }\n\n    setMaxWidthStretch(): void {\n      lib._YGNodeStyleSetMaxWidthStretch(this._ptr);\n    }\n\n    setMaxHeight(maxHeight): void {\n      dispatchSetter.call(this, 'setMaxHeight', lib._YGNodeStyleSetMaxHeight, [\n        maxHeight,\n      ]);\n    }\n\n    setMaxHeightPercent(maxHeight: number): void {\n      lib._YGNodeStyleSetMaxHeightPercent(this._ptr, maxHeight);\n    }\n\n    setMaxHeightMaxContent(): void {\n      lib._YGNodeStyleSetMaxHeightMaxContent(this._ptr);\n    }\n\n    setMaxHeightFitContent(): void {\n      lib._YGNodeStyleSetMaxHeightFitContent(this._ptr);\n    }\n\n    setMaxHeightStretch(): void {\n      lib._YGNodeStyleSetMaxHeightStretch(this._ptr);\n    }\n\n    setAspectRatio(aspectRatio: number): void {\n      lib._YGNodeStyleSetAspectRatio(this._ptr, aspectRatio);\n    }\n\n    setBorder(edge: Edge, border: number): void {\n      lib._YGNodeStyleSetBorder(this._ptr, edge, border);\n    }\n\n    setPadding(edge: Edge, padding): void {\n      dispatchSetter.call(this, 'setPadding', lib._YGNodeStyleSetPadding, [\n        edge,\n        padding,\n      ]);\n    }\n\n    setPaddingPercent(edge: Edge, padding: number): void {\n      lib._YGNodeStyleSetPaddingPercent(this._ptr, edge, padding);\n    }\n\n    setGap(gutter: Gutter, gapLength): void {\n      dispatchSetter.call(this, 'setGap', lib._YGNodeStyleSetGap, [\n        gutter,\n        gapLength,\n      ]);\n    }\n\n    setGapPercent(gutter: Gutter, gapLength: number): void {\n      lib._YGNodeStyleSetGapPercent(this._ptr, gutter, gapLength);\n    }\n\n    setBoxSizing(boxSizing: BoxSizing): void {\n      lib._YGNodeStyleSetBoxSizing(this._ptr, boxSizing);\n    }\n\n    setIsReferenceBaseline(isReferenceBaseline: boolean): void {\n      lib._YGNodeSetIsReferenceBaseline(this._ptr, isReferenceBaseline ? 1 : 0);\n    }\n\n    setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void {\n      lib._YGNodeSetAlwaysFormsContainingBlock(\n        this._ptr,\n        alwaysFormsContainingBlock ? 1 : 0,\n      );\n    }\n\n    // --- Style getters ---\n    getPositionType(): PositionType {\n      return lib._YGNodeStyleGetPositionType(this._ptr);\n    }\n\n    getPosition(edge: Edge): Value {\n      lib._jswrap_YGNodeStyleGetPosition(this._ptr, edge);\n      return readYGValue();\n    }\n\n    getAlignContent(): Align {\n      return lib._YGNodeStyleGetAlignContent(this._ptr);\n    }\n\n    getAlignItems(): Align {\n      return lib._YGNodeStyleGetAlignItems(this._ptr);\n    }\n\n    getAlignSelf(): Align {\n      return lib._YGNodeStyleGetAlignSelf(this._ptr);\n    }\n\n    getFlexDirection(): FlexDirection {\n      return lib._YGNodeStyleGetFlexDirection(this._ptr);\n    }\n\n    getFlexWrap(): Wrap {\n      return lib._YGNodeStyleGetFlexWrap(this._ptr);\n    }\n\n    getJustifyContent(): Justify {\n      return lib._YGNodeStyleGetJustifyContent(this._ptr);\n    }\n\n    getDirection(): Direction {\n      return lib._YGNodeStyleGetDirection(this._ptr);\n    }\n\n    getMargin(edge: Edge): Value {\n      lib._jswrap_YGNodeStyleGetMargin(this._ptr, edge);\n      return readYGValue();\n    }\n\n    getOverflow(): Overflow {\n      return lib._YGNodeStyleGetOverflow(this._ptr);\n    }\n\n    getDisplay(): Display {\n      return lib._YGNodeStyleGetDisplay(this._ptr);\n    }\n\n    getFlexBasis(): Value {\n      lib._jswrap_YGNodeStyleGetFlexBasis(this._ptr);\n      return readYGValue();\n    }\n\n    getFlexGrow(): number {\n      return lib._YGNodeStyleGetFlexGrow(this._ptr);\n    }\n\n    getFlexShrink(): number {\n      return lib._YGNodeStyleGetFlexShrink(this._ptr);\n    }\n\n    getWidth(): Value {\n      lib._jswrap_YGNodeStyleGetWidth(this._ptr);\n      return readYGValue();\n    }\n\n    getHeight(): Value {\n      lib._jswrap_YGNodeStyleGetHeight(this._ptr);\n      return readYGValue();\n    }\n\n    getMinWidth(): Value {\n      lib._jswrap_YGNodeStyleGetMinWidth(this._ptr);\n      return readYGValue();\n    }\n\n    getMinHeight(): Value {\n      lib._jswrap_YGNodeStyleGetMinHeight(this._ptr);\n      return readYGValue();\n    }\n\n    getMaxWidth(): Value {\n      lib._jswrap_YGNodeStyleGetMaxWidth(this._ptr);\n      return readYGValue();\n    }\n\n    getMaxHeight(): Value {\n      lib._jswrap_YGNodeStyleGetMaxHeight(this._ptr);\n      return readYGValue();\n    }\n\n    getAspectRatio(): number {\n      return lib._YGNodeStyleGetAspectRatio(this._ptr);\n    }\n\n    getBorder(edge: Edge): number {\n      return lib._YGNodeStyleGetBorder(this._ptr, edge);\n    }\n\n    getPadding(edge: Edge): Value {\n      lib._jswrap_YGNodeStyleGetPadding(this._ptr, edge);\n      return readYGValue();\n    }\n\n    getGap(gutter: Gutter): Value {\n      lib._jswrap_YGNodeStyleGetGap(this._ptr, gutter);\n      return readYGValue();\n    }\n\n    getBoxSizing(): BoxSizing {\n      return lib._YGNodeStyleGetBoxSizing(this._ptr);\n    }\n\n    isReferenceBaseline(): boolean {\n      return !!lib._YGNodeIsReferenceBaseline(this._ptr);\n    }\n\n    // --- Measure / Dirtied ---\n    setMeasureFunc(measureFunc: MeasureFunction | null): void {\n      if (measureFunc) {\n        lib._yogaMeasureFuncs.set(this._ptr, measureFunc);\n        lib._jswrap_YGNodeSetMeasureFunc(this._ptr);\n      } else {\n        this.unsetMeasureFunc();\n      }\n    }\n\n    unsetMeasureFunc(): void {\n      lib._yogaMeasureFuncs.delete(this._ptr);\n      lib._jswrap_YGNodeUnsetMeasureFunc(this._ptr);\n    }\n\n    setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void {\n      if (dirtiedFunc) {\n        const nodeWeakRef = new WeakRef(this);\n        lib._yogaDirtiedFuncs.set(this._ptr, () => {\n          const node = nodeWeakRef.deref();\n          if (node) dirtiedFunc(node);\n        });\n        lib._jswrap_YGNodeSetDirtiedFunc(this._ptr);\n      } else {\n        this.unsetDirtiedFunc();\n      }\n    }\n\n    unsetDirtiedFunc(): void {\n      lib._yogaDirtiedFuncs.delete(this._ptr);\n      lib._jswrap_YGNodeUnsetDirtiedFunc(this._ptr);\n    }\n\n    // --- Dirty / Layout ---\n    markDirty(): void {\n      lib._YGNodeMarkDirty(this._ptr);\n    }\n\n    isDirty(): boolean {\n      return !!lib._YGNodeIsDirty(this._ptr);\n    }\n\n    markLayoutSeen(): void {\n      lib._YGNodeSetHasNewLayout(this._ptr, 0);\n    }\n\n    hasNewLayout(): boolean {\n      return !!lib._YGNodeGetHasNewLayout(this._ptr);\n    }\n\n    calculateLayout(\n      width: number | 'auto' | undefined = NaN,\n      height: number | 'auto' | undefined = NaN,\n      direction: Direction = Direction.LTR,\n    ): void {\n      lib._YGNodeCalculateLayout(this._ptr, width, height, direction);\n    }\n\n    // --- Layout getters ---\n    getComputedLeft(): number {\n      return lib._YGNodeLayoutGetLeft(this._ptr);\n    }\n\n    getComputedRight(): number {\n      return lib._YGNodeLayoutGetRight(this._ptr);\n    }\n\n    getComputedTop(): number {\n      return lib._YGNodeLayoutGetTop(this._ptr);\n    }\n\n    getComputedBottom(): number {\n      return lib._YGNodeLayoutGetBottom(this._ptr);\n    }\n\n    getComputedWidth(): number {\n      return lib._YGNodeLayoutGetWidth(this._ptr);\n    }\n\n    getComputedHeight(): number {\n      return lib._YGNodeLayoutGetHeight(this._ptr);\n    }\n\n    getComputedLayout(): Layout {\n      return {\n        left: lib._YGNodeLayoutGetLeft(this._ptr),\n        right: lib._YGNodeLayoutGetRight(this._ptr),\n        top: lib._YGNodeLayoutGetTop(this._ptr),\n        bottom: lib._YGNodeLayoutGetBottom(this._ptr),\n        width: lib._YGNodeLayoutGetWidth(this._ptr),\n        height: lib._YGNodeLayoutGetHeight(this._ptr),\n      };\n    }\n\n    getComputedMargin(edge: Edge): number {\n      return lib._YGNodeLayoutGetMargin(this._ptr, edge);\n    }\n\n    getComputedBorder(edge: Edge): number {\n      return lib._YGNodeLayoutGetBorder(this._ptr, edge);\n    }\n\n    getComputedPadding(edge: Edge): number {\n      return lib._YGNodeLayoutGetPadding(this._ptr, edge);\n    }\n  }\n\n  return {\n    Config: {\n      create(): Config {\n        return new ConfigImpl(lib._YGConfigNew());\n      },\n    },\n    Node: {\n      create(config?: Config): Node {\n        if (config) {\n          return new NodeImpl(\n            lib._YGNodeNewWithConfig((config as ConfigImpl)._ptr),\n          );\n        }\n        return new NodeImpl(lib._YGNodeNew());\n      },\n      createDefault(): Node {\n        return new NodeImpl(lib._YGNodeNew());\n      },\n      createWithConfig(config: Config): Node {\n        return new NodeImpl(\n          lib._YGNodeNewWithConfig((config as ConfigImpl)._ptr),\n        );\n      },\n    },\n    ...YGEnums,\n  };\n}\n"
  },
  {
    "path": "javascript/tests/Benchmarks/YGBenchmark.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {getMeasureCounter} from '../tools/MeasureCounter.ts';\nimport {YGBENCHMARK} from '../tools/globals.ts';\n\nimport Yoga from 'yoga-layout';\n\nconst ITERATIONS = 2000;\n\nYGBENCHMARK('Stack with flex', () => {\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const measureCounter = getMeasureCounter();\n\n  for (let i = 0; i < ITERATIONS; i++) {\n    const child = Yoga.Node.create();\n    child.setMeasureFunc(measureCounter.inc);\n    child.setFlex(1);\n    root.insertChild(child, 0);\n  }\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n});\n\nYGBENCHMARK('Align stretch in undefined axis', () => {\n  const root = Yoga.Node.create();\n\n  const measureCounter = getMeasureCounter();\n\n  for (let i = 0; i < ITERATIONS; i++) {\n    const child = Yoga.Node.create();\n    child.setMeasureFunc(measureCounter.inc);\n    child.setHeight(20);\n    root.insertChild(child, 0);\n  }\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n});\n\nYGBENCHMARK('Nested flex', () => {\n  const root = Yoga.Node.create();\n\n  const measureCounter = getMeasureCounter();\n\n  const iterations = Math.pow(ITERATIONS, 1 / 2);\n\n  for (let i = 0; i < iterations; i++) {\n    const child = Yoga.Node.create();\n    child.setFlex(1);\n    root.insertChild(child, 0);\n\n    for (let ii = 0; ii < iterations; ii++) {\n      const grandChild = Yoga.Node.create();\n      grandChild.setMeasureFunc(measureCounter.inc);\n      grandChild.setFlex(1);\n      child.insertChild(grandChild, 0);\n    }\n  }\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n});\n\nYGBENCHMARK('Huge nested layout', () => {\n  const root = Yoga.Node.create();\n\n  const iterations = Math.pow(ITERATIONS, 1 / 4);\n\n  for (let i = 0; i < iterations; i++) {\n    const child = Yoga.Node.create();\n    child.setFlexGrow(1);\n    child.setWidth(10);\n    child.setHeight(10);\n    root.insertChild(child, 0);\n\n    for (let ii = 0; ii < iterations; ii++) {\n      const grandChild = Yoga.Node.create();\n      grandChild.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n      grandChild.setFlexGrow(1);\n      grandChild.setWidth(10);\n      grandChild.setHeight(10);\n      child.insertChild(grandChild, 0);\n\n      for (let iii = 0; iii < iterations; iii++) {\n        const grandGrandChild = Yoga.Node.create();\n        grandGrandChild.setFlexGrow(1);\n        grandGrandChild.setWidth(10);\n        grandGrandChild.setHeight(10);\n        grandChild.insertChild(grandGrandChild, 0);\n\n        for (let iiii = 0; iiii < iterations; iiii++) {\n          const grandGrandGrandChild = Yoga.Node.create();\n          grandGrandGrandChild.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n          grandGrandGrandChild.setFlexGrow(1);\n          grandGrandGrandChild.setWidth(10);\n          grandGrandGrandChild.setHeight(10);\n          grandGrandChild.insertChild(grandGrandGrandChild, 0);\n        }\n      }\n    }\n  }\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n});\n"
  },
  {
    "path": "javascript/tests/YGAlignBaselineTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('align_baseline_parent_using_child_in_column_as_reference', () => {\n  const config = Yoga.Config.create();\n  const root = Yoga.Node.create(config);\n  root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n  root.setWidth(1000);\n  root.setHeight(1000);\n  root.setAlignItems(Yoga.ALIGN_BASELINE);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child0.setWidth(500);\n  root_child0.setHeight(600);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child1.setWidth(500);\n  root_child1.setHeight(800);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child1_child0.setWidth(500);\n  root_child1_child0.setHeight(300);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child1_child1.setWidth(500);\n  root_child1_child1.setHeight(400);\n  root_child1_child1.setIsReferenceBaseline(true);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(500);\n  expect(root_child1.getComputedTop()).toBe(0);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(300);\n});\n\ntest('align_baseline_parent_using_child_in_row_as_reference', () => {\n  const config = Yoga.Config.create();\n  const root = Yoga.Node.create(config);\n  root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n  root.setWidth(1000);\n  root.setHeight(1000);\n  root.setAlignItems(Yoga.ALIGN_BASELINE);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child0.setWidth(500);\n  root_child0.setHeight(600);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n  root_child1.setWidth(500);\n  root_child1.setHeight(800);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child1_child0.setWidth(500);\n  root_child1_child0.setHeight(500);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setFlexDirection(Yoga.FLEX_DIRECTION_COLUMN);\n  root_child1_child1.setWidth(500);\n  root_child1_child1.setHeight(400);\n  root_child1_child1.setIsReferenceBaseline(true);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(500);\n  expect(root_child1.getComputedTop()).toBe(200);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(500);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n});\n"
  },
  {
    "path": "javascript/tests/YGComputedBorderTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('border_start', () => {\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Yoga.EDGE_START, 10);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_LTR);\n\n  expect(root.getComputedBorder(Yoga.EDGE_LEFT)).toBe(10);\n  expect(root.getComputedBorder(Yoga.EDGE_RIGHT)).toBe(0);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_RTL);\n\n  expect(root.getComputedBorder(Yoga.EDGE_LEFT)).toBe(0);\n  expect(root.getComputedBorder(Yoga.EDGE_RIGHT)).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/YGComputedMarginTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('margin_start', () => {\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setMargin(Yoga.EDGE_START, `10%`);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_LTR);\n\n  expect(root.getComputedMargin(Yoga.EDGE_LEFT)).toBe(10);\n  expect(root.getComputedMargin(Yoga.EDGE_RIGHT)).toBe(0);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_RTL);\n\n  expect(root.getComputedMargin(Yoga.EDGE_LEFT)).toBe(0);\n  expect(root.getComputedMargin(Yoga.EDGE_RIGHT)).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/YGComputedPaddingTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('padding_start', () => {\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Yoga.EDGE_START, `10%`);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_LTR);\n\n  expect(root.getComputedPadding(Yoga.EDGE_LEFT)).toBe(10);\n  expect(root.getComputedPadding(Yoga.EDGE_RIGHT)).toBe(0);\n\n  root.calculateLayout(100, 100, Yoga.DIRECTION_RTL);\n\n  expect(root.getComputedPadding(Yoga.EDGE_LEFT)).toBe(0);\n  expect(root.getComputedPadding(Yoga.EDGE_RIGHT)).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/YGDirtiedTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('dirtied', () => {\n  const root = Yoga.Node.create();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  let dirtied = 0;\n  root.setDirtiedFunc(() => {\n    dirtied++;\n  });\n\n  // only nodes with a measure function can be marked dirty\n  root.setMeasureFunc(() => ({width: 0, height: 0}));\n\n  expect(dirtied).toBe(0);\n\n  // dirtied func MUST be called in case of explicit dirtying.\n  root.markDirty();\n  expect(dirtied).toBe(1);\n\n  // dirtied func MUST be called ONCE.\n  root.markDirty();\n  expect(dirtied).toBe(1);\n});\n\ntest('dirtied_propagation', () => {\n  const root = Yoga.Node.create();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create();\n  root_child0.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child0.setWidth(50);\n  root_child0.setHeight(20);\n  root_child0.setMeasureFunc(() => ({width: 0, height: 0}));\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create();\n  root_child1.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 0);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  let dirtied = 0;\n  root.setDirtiedFunc(() => {\n    dirtied++;\n  });\n\n  expect(dirtied).toBe(0);\n\n  // dirtied func MUST be called for the first time.\n  root_child0.markDirty();\n  expect(dirtied).toBe(1);\n\n  // dirtied func must NOT be called for the second time.\n  root_child0.markDirty();\n  expect(dirtied).toBe(1);\n});\n\ntest('dirtied_hierarchy', () => {\n  const root = Yoga.Node.create();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create();\n  root_child0.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child0.setWidth(50);\n  root_child0.setHeight(20);\n  root_child0.setMeasureFunc(() => ({width: 0, height: 0}));\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create();\n  root_child1.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root_child0.setMeasureFunc(() => ({width: 0, height: 0}));\n  root.insertChild(root_child1, 0);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  let dirtied = 0;\n  root_child0.setDirtiedFunc(() => {\n    dirtied++;\n  });\n\n  expect(dirtied).toBe(0);\n\n  // dirtied func must NOT be called for descendants.\n  // NOTE: nodes without a measure function cannot be marked dirty manually,\n  // but nodes with a measure function can not have children.\n  // Update the width to dirty the node instead.\n  root.setWidth(110);\n  expect(dirtied).toBe(0);\n\n  // dirtied func MUST be called in case of explicit dirtying.\n  root_child0.markDirty();\n  expect(dirtied).toBe(1);\n});\n\ntest('dirtied_reset', () => {\n  const root = Yoga.Node.create();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setMeasureFunc(() => ({width: 0, height: 0}));\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  let dirtied = 0;\n  root.setDirtiedFunc(() => {\n    dirtied++;\n  });\n\n  expect(dirtied).toBe(0);\n\n  // dirtied func MUST be called in case of explicit dirtying.\n  root.markDirty();\n  expect(dirtied).toBe(1);\n\n  // recalculate so the root is no longer dirty\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  root.reset();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setMeasureFunc(() => ({width: 0, height: 0}));\n\n  root.markDirty();\n\n  // dirtied func must NOT be called after reset.\n  root.markDirty();\n  expect(dirtied).toBe(1);\n});\n"
  },
  {
    "path": "javascript/tests/YGErrataTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('errata_all_contains_example_errata', () => {\n  const config = Yoga.Config.create();\n  config.setErrata(Yoga.ERRATA_ALL);\n\n  expect(config.getErrata()).toBe(Yoga.ERRATA_ALL);\n  expect(config.getErrata() & Yoga.ERRATA_STRETCH_FLEX_BASIS).not.toBe(0);\n});\n\ntest('errata_none_omits_example_errata', () => {\n  const config = Yoga.Config.create();\n  config.setErrata(Yoga.ERRATA_NONE);\n\n  expect(config.getErrata()).toBe(Yoga.ERRATA_NONE);\n  expect(config.getErrata() & Yoga.ERRATA_STRETCH_FLEX_BASIS).toBe(0);\n});\n\ntest('errata_is_settable', () => {\n  const config = Yoga.Config.create();\n\n  config.setErrata(Yoga.ERRATA_ALL);\n  expect(config.getErrata()).toBe(Yoga.ERRATA_ALL);\n\n  config.setErrata(Yoga.ERRATA_NONE);\n  expect(config.getErrata()).toBe(Yoga.ERRATA_NONE);\n});\n"
  },
  {
    "path": "javascript/tests/YGFlexBasisAuto.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('flex_basis_auto', () => {\n  const root = Yoga.Node.create();\n\n  expect(root.getFlexBasis().unit).toBe(Yoga.UNIT_AUTO);\n\n  root.setFlexBasis(10);\n  expect(root.getFlexBasis().unit).toBe(Yoga.UNIT_POINT);\n  expect(root.getFlexBasis().value).toBe(10);\n\n  root.setFlexBasisAuto();\n  expect(root.getFlexBasis().unit).toBe(Yoga.UNIT_AUTO);\n});\n"
  },
  {
    "path": "javascript/tests/YGHasNewLayout.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\ntest('new_layout_can_be_marked_seen', () => {\n  const root = Yoga.Node.create();\n  root.markLayoutSeen();\n  expect(root.hasNewLayout()).toBe(false);\n});\n\ntest('new_layout_calculating_layout_marks_layout_as_unseen', () => {\n  const root = Yoga.Node.create();\n  root.markLayoutSeen();\n  root.calculateLayout(undefined, undefined);\n  expect(root.hasNewLayout()).toBe(true);\n});\n\ntest('new_layout_calculated_layout_can_be_marked_seen', () => {\n  const root = Yoga.Node.create();\n  root.calculateLayout(undefined, undefined);\n  root.markLayoutSeen();\n  expect(root.hasNewLayout()).toBe(false);\n});\n\ntest('new_layout_recalculating_layout_does_mark_as_unseen', () => {\n  const root = Yoga.Node.create();\n  root.calculateLayout(undefined, undefined);\n  root.markLayoutSeen();\n  root.calculateLayout(undefined, undefined);\n  expect(root.hasNewLayout()).toBe(true);\n});\n\ntest('new_layout_reset_also_resets_layout_seen', () => {\n  const root = Yoga.Node.create();\n  root.markLayoutSeen();\n  root.reset();\n  expect(root.hasNewLayout()).toBe(true);\n});\n\ntest('new_layout_children_sets_new_layout', () => {\n  const root = Yoga.Node.create();\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create();\n  root_child0.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child0.setWidth(50);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create();\n  root_child1.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 0);\n\n  expect(root.hasNewLayout()).toEqual(true);\n  expect(root_child0.hasNewLayout()).toEqual(true);\n  expect(root_child1.hasNewLayout()).toEqual(true);\n\n  root.markLayoutSeen();\n  root_child0.markLayoutSeen();\n  root_child1.markLayoutSeen();\n\n  expect(root.hasNewLayout()).toEqual(false);\n  expect(root_child0.hasNewLayout()).toEqual(false);\n  expect(root_child1.hasNewLayout()).toEqual(false);\n\n  root_child1.setHeight(30);\n  root.calculateLayout(undefined, undefined);\n\n  expect(root.hasNewLayout()).toEqual(true);\n  expect(root_child0.hasNewLayout()).toEqual(true);\n  expect(root_child1.hasNewLayout()).toEqual(true);\n});\n"
  },
  {
    "path": "javascript/tests/YGMeasureCacheTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\n\nimport {getMeasureCounterMax} from './tools/MeasureCounter.ts';\n\ntest('measure_once_single_flexible_child', () => {\n  const root = Yoga.Node.create();\n  root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n  root.setAlignItems(Yoga.ALIGN_FLEX_START);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const measureCounter = getMeasureCounterMax();\n\n  const root_child0 = Yoga.Node.create();\n  root_child0.setMeasureFunc(measureCounter.inc);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  expect(measureCounter.get()).toBe(1);\n});\n"
  },
  {
    "path": "javascript/tests/YGMeasureTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Yoga from 'yoga-layout';\nimport {getMeasureCounter} from './tools/MeasureCounter.ts';\n\ntest('dont_measure_single_grow_shrink_child', () => {\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const measureCounter = getMeasureCounter(null, 100, 100);\n\n  const root_child0 = Yoga.Node.create();\n  root_child0.setMeasureFunc(measureCounter.inc);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  expect(measureCounter.get()).toBe(0);\n});\n\ntest('dont_fail_with_incomplete_measure_dimensions', () => {\n  // @ts-expect-error Testing bad usage\n  const heightOnlyCallback = getMeasureCounter(() => ({height: 10}));\n  // @ts-expect-error Testing bad usage\n  const widthOnlyCallback = getMeasureCounter(() => ({width: 10}));\n  // @ts-expect-error Testing bad usage\n  const emptyCallback = getMeasureCounter(() => ({}));\n\n  const root = Yoga.Node.create();\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const node1 = Yoga.Node.create();\n  const node2 = Yoga.Node.create();\n  const node3 = Yoga.Node.create();\n\n  root.insertChild(node1, root.getChildCount());\n  root.insertChild(node2, root.getChildCount());\n  root.insertChild(node3, root.getChildCount());\n\n  node1.setMeasureFunc(heightOnlyCallback.inc);\n  node2.setMeasureFunc(widthOnlyCallback.inc);\n  node3.setMeasureFunc(emptyCallback.inc);\n\n  root.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);\n\n  expect(heightOnlyCallback.get()).toBe(1);\n  expect(widthOnlyCallback.get()).toBe(1);\n  expect(emptyCallback.get()).toBe(1);\n\n  expect(node1.getComputedWidth()).toBe(100);\n  expect(node1.getComputedHeight()).toBe(10);\n\n  expect(node2.getComputedWidth()).toBe(100);\n  expect(node2.getComputedHeight()).toBe(0);\n\n  expect(node3.getComputedWidth()).toBe(100);\n  expect(node3.getComputedHeight()).toBe(0);\n});\n"
  },
  {
    "path": "javascript/tests/bin/run-bench.ts",
    "content": "#!/usr/bin/env ts-node\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport path from 'path';\n\nconst WARMUP_ITERATIONS = 3;\nconst BENCHMARK_ITERATIONS = 10;\n\nconst testFiles = process.argv.slice(2);\n\nconst testResults = new Map<string, Map<string, number>>();\n\nfor (const type of ['wasm']) {\n  for (const file of testFiles) {\n    globalThis.YGBENCHMARK = (name: string, fn: () => void) => {\n      let testEntry = testResults.get(name);\n\n      if (testEntry === undefined)\n        testResults.set(name, (testEntry = new Map()));\n\n      for (let t = 0; t < WARMUP_ITERATIONS; ++t) fn();\n\n      const start = Date.now();\n\n      for (let t = 0; t < BENCHMARK_ITERATIONS; ++t) fn();\n\n      const end = Date.now();\n\n      testEntry.set(type, (end - start) / BENCHMARK_ITERATIONS);\n    };\n\n    const modulePath = path.resolve(file);\n    await import(modulePath);\n  }\n}\n\nconsole.log(\n  `Note: those tests are independants; there is no time relation to be expected between them`,\n);\n\nfor (const [name, results] of testResults) {\n  console.log();\n\n  const min = Math.min(Infinity, ...results.values());\n\n  console.log(name);\n\n  for (const [type, result] of results) {\n    console.log(\n      `  - ${type}: ${result}ms (${Math.round((result / min) * 10000) / 100}%)`,\n    );\n  }\n}\n"
  },
  {
    "path": "javascript/tests/generated/YGAbsolutePositionTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<da73c7c3db2a083aa5e9c6fc331402d9>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAbsolutePositionTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('absolute_layout_width_height_start_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Start, 10);\n  root_child0.setPosition(Edge.Top, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('absolute_layout_width_height_left_auto_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPositionAuto(Edge.Left);\n  root_child0.setPosition(Edge.Right, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('absolute_layout_width_height_left_right_auto', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Left, 10);\n  root_child0.setPositionAuto(Edge.Right);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('absolute_layout_width_height_left_auto_right_auto', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPositionAuto(Edge.Left);\n  root_child0.setPositionAuto(Edge.Right);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('absolute_layout_width_height_end_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.End, 10);\n  root_child0.setPosition(Edge.Bottom, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('absolute_layout_start_top_end_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Start, 10);\n  root_child0.setPosition(Edge.Top, 10);\n  root_child0.setPosition(Edge.End, 10);\n  root_child0.setPosition(Edge.Bottom, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('absolute_layout_width_height_start_top_end_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Start, 10);\n  root_child0.setPosition(Edge.Top, 10);\n  root_child0.setPosition(Edge.End, 10);\n  root_child0.setPosition(Edge.Bottom, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(50);\n  root.setWidth(50);\n  root.setOverflow(Overflow.Hidden);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Start, 0);\n  root_child0.setPosition(Edge.Top, 0);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setHeight(100);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('absolute_layout_within_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setBorder(Edge.All, 10);\n  root.setMargin(Edge.All, 10);\n  root.setPadding(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setPosition(Edge.Left, 0);\n  root_child0.setPosition(Edge.Top, 0);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setPositionType(PositionType.Absolute);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root_child1.setPosition(Edge.Right, 0);\n  root_child1.setPosition(Edge.Bottom, 0);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setPositionType(PositionType.Absolute);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root_child2.setPosition(Edge.Left, 0);\n  root_child2.setPosition(Edge.Top, 0);\n  root_child2.setMargin(Edge.All, 10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setPositionType(PositionType.Absolute);\n  root_child3.setWidth(50);\n  root_child3.setHeight(50);\n  root_child3.setPosition(Edge.Right, 0);\n  root_child3.setPosition(Edge.Bottom, 0);\n  root_child3.setMargin(Edge.All, 10);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(30);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(30);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_align_items_and_justify_content_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_and_justify_content_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.FlexEnd);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_justify_content_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_center_on_child_only', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root_child0.setAlignSelf(Align.Center);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_and_justify_content_center_and_top_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root_child0.setPosition(Edge.Top, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_and_justify_content_center_and_bottom_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root_child0.setPosition(Edge.Bottom, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_and_justify_content_center_and_left_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root_child0.setPosition(Edge.Left, 5);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('absolute_layout_align_items_and_justify_content_center_and_right_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(110);\n  root.setFlexGrow(1);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(60);\n  root_child0.setHeight(40);\n  root_child0.setPosition(Edge.Right, 5);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('position_root_with_rtl_should_position_withoutdirection', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setPosition(Edge.Left, 72);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(72);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(72);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n});\ntest('absolute_layout_percentage_bottom_based_on_parent_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Top, \"50%\");\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setPositionType(PositionType.Absolute);\n  root_child1.setPosition(Edge.Bottom, \"50%\");\n  root_child1.setWidth(10);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setPositionType(PositionType.Absolute);\n  root_child2.setPosition(Edge.Top, \"10%\");\n  root_child2.setWidth(10);\n  root_child2.setPosition(Edge.Bottom, \"10%\");\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(160);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(160);\n});\ntest('absolute_layout_in_wrap_reverse_column_container', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('absolute_layout_in_wrap_reverse_row_container', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('absolute_layout_in_wrap_reverse_column_container_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('absolute_layout_in_wrap_reverse_row_container_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('percent_absolute_position_infinite_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(300);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(\"20%\");\n  root_child1.setHeight(\"20%\");\n  root_child1.setPosition(Edge.Left, \"20%\");\n  root_child1.setPosition(Edge.Top, \"20%\");\n  root_child1.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(0);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(300);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(60);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(0);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(300);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(60);\n  expect(root_child1.getComputedHeight()).toBe(0);\n});\ntest('absolute_layout_percentage_height_based_on_padded_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.Top, 10);\n  root.setBorder(Edge.Top, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(\"50%\");\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(45);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(45);\n});\ntest('absolute_layout_percentage_height_based_on_padded_parent_and_align_items_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.Top, 20);\n  root.setPadding(Edge.Bottom, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(100);\n  root_child0.setHeight(\"50%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(25);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(25);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_padding_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setPadding(Edge.Left, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_padding_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setPadding(Edge.Right, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_padding_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setPadding(Edge.Top, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_padding_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setPadding(Edge.Bottom, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setMargin(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setPadding(Edge.All, 50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(220);\n  expect(root.getComputedHeight()).toBe(220);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(220);\n  expect(root.getComputedHeight()).toBe(220);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setMargin(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setBorder(Edge.All, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(220);\n  expect(root.getComputedHeight()).toBe(220);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(220);\n  expect(root.getComputedHeight()).toBe(220);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(140);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('absolute_layout_column_reverse_margin_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setPosition(Edge.Left, 5);\n  root_child0.setPosition(Edge.Right, 3);\n  root_child0.setMargin(Edge.Right, 4);\n  root_child0.setMargin(Edge.Left, 3);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Left, 1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(8);\n  expect(root_child0.getComputedTop()).toBe(150);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(143);\n  expect(root_child0.getComputedTop()).toBe(150);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAlignContentTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<37aacf42a46e0f084340980d45ce7004>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignContentTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('align_content_flex_start_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_start_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_start_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_start_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_flex_start_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_flex_start_without_height_on_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n});\ntest('align_content_flex_start_with_flex', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexBasis(\"0%\");\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setFlexGrow(1);\n  root_child3.setFlexShrink(1);\n  root_child3.setFlexBasis(\"0%\");\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(120);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(120);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n});\ntest('align_content_flex_end_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_end_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(90);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(90);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_end_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(110);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(110);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(110);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(110);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_flex_end_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.FlexEnd);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(-10);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(-10);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_flex_end_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.FlexEnd);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-70);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-40);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(-10);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-70);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-40);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(-10);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_center_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_center_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(45);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(45);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(65);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(45);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(45);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(65);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_center_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_center_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.Center);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-25);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-5);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(15);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-25);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-5);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(15);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_center_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.Center);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-35);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-5);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(25);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(-35);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(-5);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(25);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_between_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_between_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_between_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_between_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceBetween);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_between_wrapped_negative_space_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceBetween);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_between_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceBetween);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_around_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_around_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(15);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(95);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(15);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(95);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_around_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_around_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceAround);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_around_wrapped_negative_space_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceAround);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_around_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceAround);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_evenly_nowrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_evenly_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root_child4.setHeight(10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(23);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(23);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(88);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(23);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(23);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(55);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(55);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(88);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_evenly_wrap_singleline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(140);\n  root.setHeight(120);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(120);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(55);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(10);\n});\ntest('align_content_space_evenly_wrapped_negative_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceEvenly);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(20);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(40);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_space_evenly_wrapped_negative_space_gap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setHeight(320);\n  root.setBorder(Edge.All, 60);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setAlignContent(Align.SpaceEvenly);\n  root_child0.setJustifyContent(Justify.Center);\n  root_child0.setHeight(10);\n  root_child0.setGap(Gutter.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"80%\");\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"80%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(\"80%\");\n  root_child0_child2.setHeight(20);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(60);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(20);\n  expect(root_child0_child1.getComputedTop()).toBe(30);\n  expect(root_child0_child1.getComputedWidth()).toBe(160);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(60);\n  expect(root_child0_child2.getComputedWidth()).toBe(160);\n  expect(root_child0_child2.getComputedHeight()).toBe(20);\n});\ntest('align_content_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(0);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(0);\n\n  expect(root_child4.getComputedLeft()).toBe(100);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(0);\n});\ntest('align_content_stretch_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_row_with_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_row_with_flex', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setFlexGrow(1);\n  root_child3.setFlexShrink(1);\n  root_child3.setFlexBasis(\"0%\");\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(0);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(100);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(0);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('align_content_stretch_row_with_flex_no_shrink', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setFlexGrow(1);\n  root_child3.setFlexBasis(\"0%\");\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(0);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(100);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(0);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('align_content_stretch_row_with_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setMargin(Edge.All, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setMargin(Edge.All, 10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(40);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(40);\n\n  expect(root_child3.getComputedLeft()).toBe(60);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(40);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(40);\n\n  expect(root_child3.getComputedLeft()).toBe(40);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(100);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(20);\n});\ntest('align_content_stretch_row_with_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setPadding(Edge.All, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setPadding(Edge.All, 10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_row_with_single_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('align_content_stretch_row_with_fixed_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(60);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(60);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(80);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(60);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(80);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(20);\n});\ntest('align_content_stretch_row_with_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setMaxHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(50);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(50);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_row_with_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setMinHeight(80);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(90);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(90);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(90);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(90);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(90);\n\n  expect(root_child3.getComputedLeft()).toBe(100);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(10);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(90);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(10);\n});\ntest('align_content_stretch_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(150);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(50);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(50);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(50);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_is_not_overriding_align_items', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setAlignItems(Align.Center);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setAlignContent(Align.Stretch);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setAlignContent(Align.Stretch);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(45);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(45);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest('align_content_stretch_with_min_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMinHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(250);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(250);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_stretch_with_max_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_stretch_with_max_cross_axis_and_border_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n  root.setBorder(Edge.All, 5);\n  root.setPadding(Edge.All, 2);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(414);\n\n  expect(root_child0.getComputedLeft()).toBe(7);\n  expect(root_child0.getComputedTop()).toBe(7);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(7);\n  expect(root_child1.getComputedTop()).toBe(207);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(414);\n\n  expect(root_child0.getComputedLeft()).toBe(93);\n  expect(root_child0.getComputedTop()).toBe(7);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(93);\n  expect(root_child1.getComputedTop()).toBe(207);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_space_evenly_with_min_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMinHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(33);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(267);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(33);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(267);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_space_evenly_with_max_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_space_evenly_with_max_cross_axis_violated', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_space_evenly_with_max_cross_axis_violated_padding_and_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceEvenly);\n  root.setBorder(Edge.All, 5);\n  root.setPadding(Edge.All, 2);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(7);\n  expect(root_child0.getComputedTop()).toBe(7);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(7);\n  expect(root_child1.getComputedTop()).toBe(207);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(93);\n  expect(root_child0.getComputedTop()).toBe(7);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(93);\n  expect(root_child1.getComputedTop()).toBe(207);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('align_content_space_around_and_align_items_flex_end_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceAround);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(88);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(88);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_space_around_and_align_items_center_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceAround);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(63);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(63);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_space_around_and_align_items_flex_start_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceAround);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(38);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(38);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_flex_start_stretch_doesnt_influence_line_box_dim', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(400);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setPadding(Edge.Top, 20);\n  root.setPadding(Edge.Bottom, 20);\n  root.setPadding(Edge.Left, 20);\n  root.setPadding(Edge.Right, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setMargin(Edge.Right, 20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(30);\n  root_child1_child0.setWidth(30);\n  root_child1_child0.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setHeight(30);\n  root_child1_child1.setWidth(30);\n  root_child1_child1.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setHeight(30);\n  root_child1_child2.setWidth(30);\n  root_child1_child2.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setHeight(30);\n  root_child1_child3.setWidth(30);\n  root_child1_child3.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child3, 3);\n\n  const root_child1_child4 = Yoga.Node.create(config);\n  root_child1_child4.setHeight(30);\n  root_child1_child4.setWidth(30);\n  root_child1_child4.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child4, 4);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(50);\n  root_child2.setMargin(Edge.Left, 20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(140);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(50);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(100);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(30);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(50);\n  expect(root_child1_child4.getComputedTop()).toBe(30);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(330);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(260);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(120);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(70);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(20);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(120);\n  expect(root_child1_child3.getComputedTop()).toBe(30);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(70);\n  expect(root_child1_child4.getComputedTop()).toBe(30);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_stretch_does_influence_line_box_dim', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(400);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setPadding(Edge.Top, 20);\n  root.setPadding(Edge.Bottom, 20);\n  root.setPadding(Edge.Left, 20);\n  root.setPadding(Edge.Right, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setMargin(Edge.Right, 20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexGrow(1);\n  root_child1.setAlignContent(Align.Stretch);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(30);\n  root_child1_child0.setWidth(30);\n  root_child1_child0.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setHeight(30);\n  root_child1_child1.setWidth(30);\n  root_child1_child1.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setHeight(30);\n  root_child1_child2.setWidth(30);\n  root_child1_child2.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setHeight(30);\n  root_child1_child3.setWidth(30);\n  root_child1_child3.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child3, 3);\n\n  const root_child1_child4 = Yoga.Node.create(config);\n  root_child1_child4.setHeight(30);\n  root_child1_child4.setWidth(30);\n  root_child1_child4.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child4, 4);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(50);\n  root_child2.setMargin(Edge.Left, 20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(140);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(50);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(100);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(50);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(50);\n  expect(root_child1_child4.getComputedTop()).toBe(50);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(330);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(260);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(120);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(70);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(20);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(120);\n  expect(root_child1_child3.getComputedTop()).toBe(50);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(70);\n  expect(root_child1_child4.getComputedTop()).toBe(50);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_space_evenly_stretch_does_influence_line_box_dim', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(400);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setPadding(Edge.Top, 20);\n  root.setPadding(Edge.Bottom, 20);\n  root.setPadding(Edge.Left, 20);\n  root.setPadding(Edge.Right, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setMargin(Edge.Right, 20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexGrow(1);\n  root_child1.setAlignContent(Align.Stretch);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(30);\n  root_child1_child0.setWidth(30);\n  root_child1_child0.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setHeight(30);\n  root_child1_child1.setWidth(30);\n  root_child1_child1.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setHeight(30);\n  root_child1_child2.setWidth(30);\n  root_child1_child2.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setHeight(30);\n  root_child1_child3.setWidth(30);\n  root_child1_child3.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child3, 3);\n\n  const root_child1_child4 = Yoga.Node.create(config);\n  root_child1_child4.setHeight(30);\n  root_child1_child4.setWidth(30);\n  root_child1_child4.setMargin(Edge.Right, 20);\n  root_child1.insertChild(root_child1_child4, 4);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(50);\n  root_child2.setMargin(Edge.Left, 20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(140);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(50);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(100);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(50);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(50);\n  expect(root_child1_child4.getComputedTop()).toBe(50);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(330);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(260);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(170);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(120);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(30);\n  expect(root_child1_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(70);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(30);\n  expect(root_child1_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(20);\n  expect(root_child1_child2.getComputedTop()).toBe(0);\n  expect(root_child1_child2.getComputedWidth()).toBe(30);\n  expect(root_child1_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(120);\n  expect(root_child1_child3.getComputedTop()).toBe(50);\n  expect(root_child1_child3.getComputedWidth()).toBe(30);\n  expect(root_child1_child3.getComputedHeight()).toBe(30);\n\n  expect(root_child1_child4.getComputedLeft()).toBe(70);\n  expect(root_child1_child4.getComputedTop()).toBe(50);\n  expect(root_child1_child4.getComputedWidth()).toBe(30);\n  expect(root_child1_child4.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_and_align_items_flex_end_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root_child0.setAlignSelf(Align.FlexStart);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(250);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(250);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_and_align_items_flex_start_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(175);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(175);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_and_align_items_center_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(38);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('align_content_stretch_and_align_items_stretch_with_flex_wrap', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(150);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root_child1.setWidth(120);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(50);\n  root_child2.setWidth(120);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(175);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(125);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(120);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(175);\n  expect(root_child2.getComputedWidth()).toBe(120);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAlignItemsTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<4caffe8672815f4626915cf6476376e9>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignItemsTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('align_items_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_items_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_items_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_items_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n});\ntest('align_baseline_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_multiline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(60);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(25);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(25);\n  root_child1_child0.setHeight(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setWidth(25);\n  root_child1_child1.setHeight(10);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setWidth(25);\n  root_child1_child2.setHeight(20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setWidth(25);\n  root_child1_child3.setHeight(10);\n  root_child1.insertChild(root_child1_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(25);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(0);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(25);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(25);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(25);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_multiline_override', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(60);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(25);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(25);\n  root_child1_child0.setHeight(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setWidth(25);\n  root_child1_child1.setHeight(10);\n  root_child1_child1.setAlignSelf(Align.Baseline);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setWidth(25);\n  root_child1_child2.setHeight(20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setWidth(25);\n  root_child1_child3.setHeight(10);\n  root_child1_child3.setAlignSelf(Align.Baseline);\n  root_child1.insertChild(root_child1_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(25);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(0);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(25);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(25);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(25);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_multiline_no_override_on_secondline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(60);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(25);\n  root_child1.setFlexWrap(Wrap.Wrap);\n  root_child1.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(25);\n  root_child1_child0.setHeight(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setWidth(25);\n  root_child1_child1.setHeight(10);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setWidth(25);\n  root_child1_child2.setHeight(20);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child1_child3 = Yoga.Node.create(config);\n  root_child1_child3.setWidth(25);\n  root_child1_child3.setHeight(10);\n  root_child1_child3.setAlignSelf(Align.Baseline);\n  root_child1.insertChild(root_child1_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(25);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(0);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(25);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(25);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(25);\n  expect(root_child1_child2.getComputedTop()).toBe(20);\n  expect(root_child1_child2.getComputedWidth()).toBe(25);\n  expect(root_child1_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child3.getComputedLeft()).toBe(0);\n  expect(root_child1_child3.getComputedTop()).toBe(20);\n  expect(root_child1_child3.getComputedWidth()).toBe(25);\n  expect(root_child1_child3.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setPosition(Edge.Top, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_top2', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root_child1.setPosition(Edge.Top, 5);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(45);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(45);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_double_nested_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(20);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(15);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(5);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(15);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(5);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(15);\n});\ntest('align_baseline_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n});\ntest('align_baseline_child_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.All, 5);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1_child0.setMargin(Edge.All, 1);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(44);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(1);\n  expect(root_child1_child0.getComputedTop()).toBe(1);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(-10);\n  expect(root_child1.getComputedTop()).toBe(44);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(-1);\n  expect(root_child1_child0.getComputedTop()).toBe(1);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_child_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root_child1.setPadding(Edge.All, 5);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(55);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(5);\n  expect(root_child1_child0.getComputedTop()).toBe(5);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(-5);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(-5);\n  expect(root_child1_child0.getComputedTop()).toBe(5);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\ntest('align_baseline_multiline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child2_child0 = Yoga.Node.create(config);\n  root_child2_child0.setWidth(50);\n  root_child2_child0.setHeight(10);\n  root_child2.insertChild(root_child2_child0, 0);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(50);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(50);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(50);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(50);\n});\ntest.skip('align_baseline_multiline_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Baseline);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(30);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(20);\n  root_child1_child0.setHeight(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root_child2.setHeight(70);\n  root.insertChild(root_child2, 2);\n\n  const root_child2_child0 = Yoga.Node.create(config);\n  root_child2_child0.setWidth(10);\n  root_child2_child0.setHeight(10);\n  root_child2.insertChild(root_child2_child0, 0);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(20);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(70);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(10);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(10);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(20);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(70);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(30);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(10);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n});\ntest.skip('align_baseline_multiline_column2', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Baseline);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(30);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(20);\n  root_child1_child0.setHeight(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root_child2.setHeight(70);\n  root.insertChild(root_child2, 2);\n\n  const root_child2_child0 = Yoga.Node.create(config);\n  root_child2_child0.setWidth(10);\n  root_child2_child0.setHeight(10);\n  root_child2.insertChild(root_child2_child0, 0);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(20);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(70);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(10);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(10);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(20);\n  expect(root_child1_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(70);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(30);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(10);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n});\ntest('align_baseline_multiline_row_and_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Baseline);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child2_child0 = Yoga.Node.create(config);\n  root_child2_child0.setWidth(50);\n  root_child2_child0.setHeight(10);\n  root_child2.insertChild(root_child2_child0, 0);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(50);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(50);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(50);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child2_child0.getComputedWidth()).toBe(50);\n  expect(root_child2_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(50);\n  expect(root_child3.getComputedHeight()).toBe(20);\n});\ntest('align_items_center_child_with_margin_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.Center);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(52);\n  root_child0_child0.setHeight(52);\n  root_child0_child0.setMargin(Edge.Left, 10);\n  root_child0_child0.setMargin(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(52);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(52);\n  expect(root_child0_child0.getComputedHeight()).toBe(52);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(52);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(52);\n  expect(root_child0_child0.getComputedHeight()).toBe(52);\n});\ntest('align_items_flex_end_child_with_margin_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(52);\n  root_child0_child0.setHeight(52);\n  root_child0_child0.setMargin(Edge.Left, 10);\n  root_child0_child0.setMargin(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(52);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(52);\n  expect(root_child0_child0.getComputedHeight()).toBe(52);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(52);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(52);\n  expect(root_child0_child0.getComputedHeight()).toBe(52);\n});\ntest('align_items_center_child_without_margin_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.Center);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(72);\n  root_child0_child0.setHeight(72);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0.getComputedHeight()).toBe(72);\n});\ntest('align_items_flex_end_child_without_margin_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(72);\n  root_child0_child0.setHeight(72);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0.getComputedHeight()).toBe(72);\n});\ntest('align_center_should_size_based_on_content', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Center);\n  root.setMargin(Edge.Top, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexShrink(1);\n  root_child0.setJustifyContent(Justify.Center);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(20);\n  root_child0_child0_child0.setHeight(20);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(20);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(20);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(20);\n});\ntest('align_stretch_should_size_based_on_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setMargin(Edge.Top, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexShrink(1);\n  root_child0.setJustifyContent(Justify.Center);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(20);\n  root_child0_child0_child0.setHeight(20);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(20);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(20);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(20);\n});\ntest('align_flex_start_with_shrinking_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.FlexStart);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setFlexGrow(1);\n  root_child0_child0_child0.setFlexShrink(1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(500);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n});\ntest('align_flex_start_with_stretching_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setFlexGrow(1);\n  root_child0_child0_child0.setFlexShrink(1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n});\ntest('align_flex_start_with_shrinking_children_with_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAlignItems(Align.FlexStart);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setFlexGrow(1);\n  root_child0_child0_child0.setFlexShrink(1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(500);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(0);\n});\ntest('align_flex_end_with_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(75);\n  root.setAlignItems(Align.FlexEnd);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Right, 5);\n  root_child0.setMargin(Edge.Left, 3);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(3);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(58);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(-8);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('align_stretch_with_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(75);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Right, 5);\n  root_child0.setMargin(Edge.Left, 3);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(3);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(58);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(-8);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('align_items_non_stretch_s526008', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(400);\n  root.setHeight(400);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setAlignItems(Align.FlexStart);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(0);\n  root_child0_child0_child0_child0.setHeight(10);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(400);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAlignSelfTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<314a0b8edb3f8e12937a84996c8b1d18>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignSelfTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('align_self_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root_child0.setAlignSelf(Align.Center);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_self_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_self_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root_child0.setAlignSelf(Align.FlexStart);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_self_flex_end_override_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root_child0.setAlignSelf(Align.FlexEnd);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('align_self_baseline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setAlignSelf(Align.Baseline);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(20);\n  root_child1.setAlignSelf(Align.Baseline);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(50);\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(50);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAndroidNewsFeed.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<1e82044495185ac27a199c4794c2ebca>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAndroidNewsFeed.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('android_news_feed', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setAlignContent(Align.Stretch);\n  root.setWidth(1080);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setAlignContent(Align.Stretch);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child0_child0.setAlignItems(Align.FlexStart);\n  root_child0_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 24);\n  root_child0_child0_child0_child0.setMargin(Edge.Start, 36);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0.insertChild(root_child0_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0_child0_child0.setWidth(120);\n  root_child0_child0_child0_child0_child0_child0.setHeight(120);\n  root_child0_child0_child0_child0_child0.insertChild(root_child0_child0_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child1.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0_child1.setFlexShrink(1);\n  root_child0_child0_child0_child0_child1.setMargin(Edge.Right, 36);\n  root_child0_child0_child0_child0_child1.setPadding(Edge.Left, 36);\n  root_child0_child0_child0_child0_child1.setPadding(Edge.Top, 21);\n  root_child0_child0_child0_child0_child1.setPadding(Edge.Right, 36);\n  root_child0_child0_child0_child0_child1.setPadding(Edge.Bottom, 18);\n  root_child0_child0_child0_child0.insertChild(root_child0_child0_child0_child0_child1, 1);\n\n  const root_child0_child0_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child1_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child0_child0_child1_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0_child1_child0.setFlexShrink(1);\n  root_child0_child0_child0_child0_child1.insertChild(root_child0_child0_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child0_child0_child1_child1 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child1_child1.setAlignContent(Align.Stretch);\n  root_child0_child0_child0_child0_child1_child1.setFlexShrink(1);\n  root_child0_child0_child0_child0_child1.insertChild(root_child0_child0_child0_child0_child1_child1, 1);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setAlignContent(Align.Stretch);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child1_child0.setAlignItems(Align.FlexStart);\n  root_child0_child0_child1_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 24);\n  root_child0_child0_child1_child0.setMargin(Edge.Start, 174);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child1_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child1_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0.insertChild(root_child0_child0_child1_child0_child0, 0);\n\n  const root_child0_child0_child1_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0_child0_child0.setWidth(72);\n  root_child0_child0_child1_child0_child0_child0.setHeight(72);\n  root_child0_child0_child1_child0_child0.insertChild(root_child0_child0_child1_child0_child0_child0, 0);\n\n  const root_child0_child0_child1_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0_child1.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0_child1.setFlexShrink(1);\n  root_child0_child0_child1_child0_child1.setMargin(Edge.Right, 36);\n  root_child0_child0_child1_child0_child1.setPadding(Edge.Left, 36);\n  root_child0_child0_child1_child0_child1.setPadding(Edge.Top, 21);\n  root_child0_child0_child1_child0_child1.setPadding(Edge.Right, 36);\n  root_child0_child0_child1_child0_child1.setPadding(Edge.Bottom, 18);\n  root_child0_child0_child1_child0.insertChild(root_child0_child0_child1_child0_child1, 1);\n\n  const root_child0_child0_child1_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0_child1_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0_child1_child0_child1_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0_child1_child0.setFlexShrink(1);\n  root_child0_child0_child1_child0_child1.insertChild(root_child0_child0_child1_child0_child1_child0, 0);\n\n  const root_child0_child0_child1_child0_child1_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0_child1_child1.setAlignContent(Align.Stretch);\n  root_child0_child0_child1_child0_child1_child1.setFlexShrink(1);\n  root_child0_child0_child1_child0_child1.insertChild(root_child0_child0_child1_child0_child1_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1080);\n  expect(root.getComputedHeight()).toBe(240);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0.getComputedHeight()).toBe(240);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0.getComputedHeight()).toBe(240);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(144);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(24);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(1044);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedWidth()).toBe(120);\n  expect(root_child0_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedWidth()).toBe(120);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child1.getComputedLeft()).toBe(120);\n  expect(root_child0_child0_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child0_child0_child1.getComputedHeight()).toBe(39);\n\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(144);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(96);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(174);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(24);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(906);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child1.getComputedLeft()).toBe(72);\n  expect(root_child0_child0_child1_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child1.getComputedHeight()).toBe(39);\n\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1080);\n  expect(root.getComputedHeight()).toBe(240);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0.getComputedHeight()).toBe(240);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0.getComputedHeight()).toBe(240);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(144);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(24);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(1044);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child0.getComputedLeft()).toBe(924);\n  expect(root_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedWidth()).toBe(120);\n  expect(root_child0_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedWidth()).toBe(120);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child0_child0_child0_child0_child1.getComputedLeft()).toBe(816);\n  expect(root_child0_child0_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child0_child0_child1.getComputedHeight()).toBe(39);\n\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child0_child0_child1_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(144);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(1080);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(96);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(24);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(906);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child0.getComputedLeft()).toBe(834);\n  expect(root_child0_child0_child1_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child0_child0.getComputedHeight()).toBe(72);\n\n  expect(root_child0_child0_child1_child0_child1.getComputedLeft()).toBe(726);\n  expect(root_child0_child0_child1_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1.getComputedWidth()).toBe(72);\n  expect(root_child0_child0_child1_child0_child1.getComputedHeight()).toBe(39);\n\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedLeft()).toBe(36);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedTop()).toBe(21);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedWidth()).toBe(0);\n  expect(root_child0_child0_child1_child0_child1_child1.getComputedHeight()).toBe(0);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAspectRatioTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<30f135a4788f0c5ef1d65a2d893d394d>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAspectRatioTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest.skip('aspect_ratio_does_not_stretch_cross_axis_dim', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setOverflow(Overflow.Scroll);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setFlexGrow(2);\n  root_child0_child0_child0.setFlexShrink(1);\n  root_child0_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0_child0.setAspectRatio(1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setFlexGrow(1);\n  root_child0_child0_child2.setFlexShrink(1);\n  root_child0_child0_child2.setFlexBasis(\"0%\");\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setFlexGrow(1);\n  root_child0_child0_child2_child0.setFlexShrink(1);\n  root_child0_child0_child2_child0.setFlexBasis(\"0%\");\n  root_child0_child0_child2_child0.setAspectRatio(1);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n\n  const root_child0_child0_child2_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0_child0.setWidth(5);\n  root_child0_child0_child2_child0.insertChild(root_child0_child0_child2_child0_child0, 0);\n\n  const root_child0_child0_child2_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0_child1.setFlexGrow(1);\n  root_child0_child0_child2_child0_child1.setFlexShrink(1);\n  root_child0_child0_child2_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child0_child2_child0_child1.setAspectRatio(1);\n  root_child0_child0_child2_child0.insertChild(root_child0_child0_child2_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(300);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(300);\n  expect(root_child0_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(197);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(197);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(5);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(202);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0_child0.getComputedWidth()).toBe(5);\n  expect(root_child0_child0_child2_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child2_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0_child1.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2_child0_child1.getComputedHeight()).toBe(197);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(300);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(300);\n  expect(root_child0_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(103);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(197);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(98);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(5);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(197);\n\n  expect(root_child0_child0_child2_child0_child0.getComputedLeft()).toBe(93);\n  expect(root_child0_child0_child2_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0_child0.getComputedWidth()).toBe(5);\n  expect(root_child0_child0_child2_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child2_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child2_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child2_child0_child1.getComputedWidth()).toBe(98);\n  expect(root_child0_child0_child2_child0_child1.getComputedHeight()).toBe(197);\n});\ntest('zero_aspect_ratio_behaves_like_auto', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setAspectRatio(0);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(250);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGAutoTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<e6bfff6309022d5a15e3300d0e23b50b>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAutoTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('auto_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(\"auto\");\n  root.setHeight(50);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('auto_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(50);\n  root.setHeight(\"auto\");\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('auto_flex_basis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(50);\n  root.setFlexBasis(\"auto\");\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('auto_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(50);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root_child0.setPositionAuto(Edge.Right);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n});\ntest('auto_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(50);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGBorderTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<0c7aeb1cb422285964264440e136da96>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBorderTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('border_no_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setBorder(Edge.All, 10);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(20);\n});\ntest('border_container_match_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setBorder(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('border_flex_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('border_stretch_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('border_center_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.Start, 10);\n  root.setBorder(Edge.End, 20);\n  root.setBorder(Edge.Bottom, 20);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(35);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(35);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGBoxSizingTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<46ef03a01883dfbdb5a69e6f2ff682ee>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBoxSizingTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('box_sizing_content_box_simple', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setBorder(Edge.All, 10);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(130);\n  expect(root.getComputedHeight()).toBe(130);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(130);\n  expect(root.getComputedHeight()).toBe(130);\n});\ntest('box_sizing_border_box_simple', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setBorder(Edge.All, 10);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_content_box_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(\"25%\");\n  root_child0.setPadding(Edge.All, 4);\n  root_child0.setBorder(Edge.All, 16);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(65);\n});\ntest('box_sizing_border_box_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(\"25%\");\n  root_child0.setPadding(Edge.All, 4);\n  root_child0.setBorder(Edge.All, 16);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('box_sizing_content_box_absolute', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"25%\");\n  root_child0.setPadding(Edge.All, 12);\n  root_child0.setBorder(Edge.All, 8);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(65);\n});\ntest('box_sizing_border_box_absolute', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"25%\");\n  root_child0.setPadding(Edge.All, 12);\n  root_child0.setBorder(Edge.All, 8);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(40);\n});\ntest('box_sizing_content_box_comtaining_block', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 12);\n  root.setBorder(Edge.All, 8);\n  root.setBoxSizing(BoxSizing.ContentBox);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Static);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(\"25%\");\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(31);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(140);\n  expect(root.getComputedHeight()).toBe(140);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(31);\n});\ntest('box_sizing_border_box_comtaining_block', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 12);\n  root.setBorder(Edge.All, 8);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Static);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(\"25%\");\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(21);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(21);\n});\ntest('box_sizing_content_box_padding_only', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(110);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(110);\n});\ntest('box_sizing_content_box_padding_only_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(150);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(75);\n  root_child0.setPadding(Edge.All, \"10%\");\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(70);\n  expect(root_child0.getComputedHeight()).toBe(95);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(70);\n  expect(root_child0.getComputedHeight()).toBe(95);\n});\ntest('box_sizing_border_box_padding_only', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_padding_only_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(150);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(75);\n  root_child0.setPadding(Edge.All, \"10%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(75);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(75);\n});\ntest('box_sizing_content_box_border_only', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.All, 10);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(120);\n  expect(root.getComputedHeight()).toBe(120);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(120);\n  expect(root.getComputedHeight()).toBe(120);\n});\ntest('box_sizing_content_box_border_only_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\ntest('box_sizing_border_box_border_only', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.All, 10);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_border_only_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\ntest('box_sizing_content_box_no_padding_no_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_no_padding_no_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_content_box_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setBorder(Edge.All, 10);\n  root.setBoxSizing(BoxSizing.ContentBox);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(25);\n  root_child3.setHeight(25);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(130);\n  expect(root.getComputedHeight()).toBe(130);\n\n  expect(root_child0.getComputedLeft()).toBe(15);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(15);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(15);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(15);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(130);\n  expect(root.getComputedHeight()).toBe(130);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(90);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_children', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 5);\n  root.setBorder(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(25);\n  root_child3.setHeight(25);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(15);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(15);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(15);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(15);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(60);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_siblings', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root_child1.setBoxSizing(BoxSizing.ContentBox);\n  root_child1.setPadding(Edge.All, 10);\n  root_child1.setBorder(Edge.All, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(25);\n  root_child3.setHeight(25);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(25);\n  expect(root_child1.getComputedWidth()).toBe(65);\n  expect(root_child1.getComputedHeight()).toBe(65);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(90);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(115);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(35);\n  expect(root_child1.getComputedTop()).toBe(25);\n  expect(root_child1.getComputedWidth()).toBe(65);\n  expect(root_child1.getComputedHeight()).toBe(65);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(90);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(75);\n  expect(root_child3.getComputedTop()).toBe(115);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_siblings', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(25);\n  root_child0.setHeight(25);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root_child1.setPadding(Edge.All, 10);\n  root_child1.setBorder(Edge.All, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(25);\n  root_child3.setHeight(25);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(25);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(25);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(65);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  expect(root_child3.getComputedLeft()).toBe(75);\n  expect(root_child3.getComputedTop()).toBe(90);\n  expect(root_child3.getComputedWidth()).toBe(25);\n  expect(root_child3.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(50);\n  root_child0.setHeight(25);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setMaxHeight(50);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setMaxHeight(50);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(50);\n  root_child0.setHeight(25);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setMinHeight(50);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(90);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_border_box_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setMinHeight(50);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 15);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(25);\n  root_child1.setHeight(25);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('box_sizing_content_box_no_height_no_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 2);\n  root_child0.setBorder(Edge.All, 7);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(18);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(18);\n});\ntest('box_sizing_border_box_no_height_no_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPadding(Edge.All, 2);\n  root_child0.setBorder(Edge.All, 7);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(18);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(18);\n});\ntest('box_sizing_content_box_nested', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.setPadding(Edge.All, 15);\n  root.setBorder(Edge.All, 3);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 2);\n  root_child0.setBorder(Edge.All, 7);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(5);\n  root_child0_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0_child0.setPadding(Edge.All, 1);\n  root_child0_child0.setBorder(Edge.All, 2);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(136);\n  expect(root.getComputedHeight()).toBe(136);\n\n  expect(root_child0.getComputedLeft()).toBe(18);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(38);\n  expect(root_child0.getComputedHeight()).toBe(38);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0.getComputedWidth()).toBe(16);\n  expect(root_child0_child0.getComputedHeight()).toBe(11);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(136);\n  expect(root.getComputedHeight()).toBe(136);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(38);\n  expect(root_child0.getComputedHeight()).toBe(38);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(13);\n  expect(root_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0.getComputedWidth()).toBe(16);\n  expect(root_child0_child0.getComputedHeight()).toBe(11);\n});\ntest('box_sizing_border_box_nested', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 15);\n  root.setBorder(Edge.All, 3);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPadding(Edge.All, 2);\n  root_child0.setBorder(Edge.All, 7);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(5);\n  root_child0_child0.setPadding(Edge.All, 1);\n  root_child0_child0.setBorder(Edge.All, 2);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(18);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(6);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(1);\n  expect(root_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(6);\n});\ntest('box_sizing_content_box_nested_alternating', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.setPadding(Edge.All, 3);\n  root.setBorder(Edge.All, 2);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root_child0.setHeight(40);\n  root_child0.setPadding(Edge.All, 8);\n  root_child0.setBorder(Edge.All, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(20);\n  root_child0_child0.setHeight(25);\n  root_child0_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0_child0.setPadding(Edge.All, 3);\n  root_child0_child0.setBorder(Edge.All, 6);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(10);\n  root_child0_child0_child0.setHeight(5);\n  root_child0_child0_child0.setPadding(Edge.All, 1);\n  root_child0_child0_child0.setBorder(Edge.All, 1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(110);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(38);\n  expect(root_child0_child0.getComputedHeight()).toBe(43);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(5);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(110);\n  expect(root.getComputedHeight()).toBe(110);\n\n  expect(root_child0.getComputedLeft()).toBe(65);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(-8);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(38);\n  expect(root_child0_child0.getComputedHeight()).toBe(43);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(19);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(5);\n});\ntest('box_sizing_border_box_nested_alternating', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 3);\n  root.setBorder(Edge.All, 2);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root_child0.setHeight(40);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0.setPadding(Edge.All, 8);\n  root_child0.setBorder(Edge.All, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(20);\n  root_child0_child0.setHeight(25);\n  root_child0_child0.setPadding(Edge.All, 3);\n  root_child0_child0.setBorder(Edge.All, 6);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(10);\n  root_child0_child0_child0.setHeight(5);\n  root_child0_child0_child0.setBoxSizing(BoxSizing.ContentBox);\n  root_child0_child0_child0.setPadding(Edge.All, 1);\n  root_child0_child0_child0.setBorder(Edge.All, 1);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(14);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(9);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(35);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(30);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-3);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(9);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(14);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(9);\n});\ntest.skip('box_sizing_content_box_flex_basis_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 10);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(55);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(55);\n});\ntest('box_sizing_border_box_flex_basis_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(30);\n});\ntest.skip('box_sizing_content_box_flex_basis_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 10);\n  root_child0.setBoxSizing(BoxSizing.ContentBox);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('box_sizing_border_box_flex_basis_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setHeight(25);\n  root_child0.setPadding(Edge.All, 5);\n  root_child0.setBorder(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest('box_sizing_content_box_padding_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.Start, 5);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_padding_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.Start, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_content_box_padding_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.End, 5);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_padding_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.End, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_content_box_border_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.Start, 5);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_border_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.Start, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_content_box_border_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.End, 5);\n  root.setBoxSizing(BoxSizing.ContentBox);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(105);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('box_sizing_border_box_border_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setBorder(Edge.End, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGDimensionTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<a59e0f740907fe47733537ab2cd3e801>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDimensionTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('wrap_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('wrap_grandchild', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setHeight(100);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGDisplayContentsTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<cd4a0d7b98eb684259714b544cb8a566>>\n * generated by gentest/gentest-driver.ts from gentest/fixtures/YGDisplayContentsTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('test1', () => {\n  const config = Yoga.Config.create();\n  const root = Yoga.Node.create(config);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGDisplayTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<135c335cb45389e0859be2e94573299d>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDisplayTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('display_none', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setDisplay(Display.None);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n});\ntest('display_none_fixed_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root_child1.setDisplay(Display.None);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n});\ntest('display_none_with_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setDisplay(Display.None);\n  root_child0.setMargin(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('display_none_with_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root_child1.setDisplay(Display.None);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setFlexGrow(1);\n  root_child1_child0.setFlexShrink(1);\n  root_child1_child0.setFlexBasis(\"0%\");\n  root_child1_child0.setWidth(20);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(0);\n  expect(root_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('display_none_with_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setDisplay(Display.None);\n  root_child1.setPosition(Edge.Top, 10);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n});\ntest('display_none_with_position_absolute', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.None);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\ntest('display_contents', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_fixed_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_with_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setDisplay(Display.Contents);\n  root_child0.setMargin(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('display_contents_with_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root_child0.setPadding(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_with_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root_child0.setPosition(Edge.Top, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_with_position_absolute', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexGrow(1);\n  root_child0_child1.setFlexShrink(1);\n  root_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child1.setHeight(20);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_nested', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setDisplay(Display.Contents);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setDisplay(Display.Contents);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setFlexGrow(1);\n  root_child0_child0_child0.setFlexShrink(1);\n  root_child0_child0_child0.setFlexBasis(\"0%\");\n  root_child0_child0_child0.setHeight(10);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setFlexGrow(1);\n  root_child0_child0_child1.setFlexShrink(1);\n  root_child0_child0_child1.setFlexBasis(\"0%\");\n  root_child0_child0_child1.setHeight(20);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(20);\n});\ntest('display_contents_with_siblings', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setHeight(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setDisplay(Display.Contents);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setFlexGrow(1);\n  root_child1_child0.setFlexShrink(1);\n  root_child1_child0.setFlexBasis(\"0%\");\n  root_child1_child0.setHeight(10);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setFlexGrow(1);\n  root_child1_child1.setFlexShrink(1);\n  root_child1_child1.setFlexBasis(\"0%\");\n  root_child1_child1.setHeight(20);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root_child2.setHeight(30);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(25);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(50);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(25);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(50);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(25);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(25);\n  expect(root_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child1_child1.getComputedWidth()).toBe(25);\n  expect(root_child1_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(30);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGFlexBasisFitContentTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<a5ae431c62a1c98a30b94c0f12a803de>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexBasisFitContentTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('container_child_overflows_definite_parent_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(500);\n  root_child0_child0.setWidth(50);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(500);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(150);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(500);\n});\ntest('container_child_overflows_definite_parent_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(500);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(-200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('container_child_within_bounds_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(50);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(150);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('multiple_container_children_overflow_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(400);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(500);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(400);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child1_child0.getComputedHeight()).toBe(500);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(400);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child1_child0.getComputedHeight()).toBe(500);\n});\ntest('scroll_container_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n  root.setOverflow(Overflow.Scroll);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(500);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(500);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(500);\n});\ntest('explicit_and_container_children_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(500);\n  root_child1.insertChild(root_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child1_child0.getComputedHeight()).toBe(500);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child1_child0.getComputedHeight()).toBe(500);\n});\ntest('flex_basis_in_scroll_content_container', () => {\n  const config = Yoga.Config.create();\n\n  config.setExperimentalFeatureEnabled(ExperimentalFeature.FixFlexBasisFitContent, true);\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(300);\n  root.setOverflow(Overflow.Scroll);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexBasis(200);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setFlexBasis(300);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(200);\n  expect(root_child0_child1.getComputedHeight()).toBe(300);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(200);\n  expect(root_child0_child1.getComputedHeight()).toBe(300);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGFlexDirectionTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<97395ee324d465dfd6129aba6426ab69>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexDirectionTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('flex_direction_column_no_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('flex_direction_row_no_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('flex_direction_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(90);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(80);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(70);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(90);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(80);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(70);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('flex_direction_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_margin_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setMargin(Edge.Left, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_margin_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setMargin(Edge.Start, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_margin_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setMargin(Edge.Right, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_margin_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setMargin(Edge.End, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column_reverse_margin_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setMargin(Edge.Top, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_column_reverse_margin_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setMargin(Edge.Bottom, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_padding_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setPadding(Edge.Left, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(120);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_padding_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setPadding(Edge.Start, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_padding_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setPadding(Edge.Right, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(-20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(-30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_padding_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setPadding(Edge.End, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(-20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(-30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(120);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column_reverse_padding_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setPadding(Edge.Top, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_column_reverse_padding_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setPadding(Edge.Bottom, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_border_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setBorder(Edge.Left, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(120);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_border_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setBorder(Edge.Start, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(80);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_border_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setBorder(Edge.Right, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(-20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(-30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_border_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setBorder(Edge.End, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(-20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(-30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(120);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column_reverse_border_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setBorder(Edge.Top, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_column_reverse_border_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.ColumnReverse);\n  root.setBorder(Edge.Bottom, 100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(90);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(90);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_pos_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setPosition(Edge.Left, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(80);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(70);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(10);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_pos_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setPosition(Edge.Start, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(80);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(70);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(10);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_pos_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setPosition(Edge.Right, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(80);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(70);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(10);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_pos_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.setPosition(Edge.End, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(80);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(70);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(10);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(20);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_column_reverse_pos_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.setPosition(Edge.Top, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_column_reverse_pos_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.setPosition(Edge.Bottom, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_inner_pos_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.Left, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_pos_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_col_reverse_inner_pos_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.Top, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_col_reverse_inner_pos_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.Bottom, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(80);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(80);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest.skip('flex_direction_row_reverse_inner_pos_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.Start, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest.skip('flex_direction_row_reverse_inner_pos_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPosition(Edge.End, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_margin_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.Left, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_margin_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_col_reverse_inner_margin_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.Top, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_col_reverse_inner_margin_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.Bottom, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(80);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(80);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_inner_marign_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.Start, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_margin_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setMargin(Edge.End, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(80);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_border_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.Left, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_border_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_col_reverse_inner_border_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_col_reverse_inner_border_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.Bottom, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_inner_border_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.Start, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_border_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setBorder(Edge.End, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_padding_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.Left, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_padding_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_col_reverse_inner_padding_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.Top, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_col_reverse_inner_padding_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(90);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(100);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(90);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(0);\n});\ntest('flex_direction_row_reverse_inner_padding_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.Start, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_row_reverse_inner_padding_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.setPadding(Edge.End, 10);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(10);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(90);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(80);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(10);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(10);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(10);\n  expect(root_child0_child2.getComputedHeight()).toBe(100);\n});\ntest('flex_direction_alternating_with_percent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(300);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"50%\");\n  root_child0.setWidth(\"50%\");\n  root_child0.setPosition(Edge.Left, \"10%\");\n  root_child0.setPosition(Edge.Top, \"10%\");\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(120);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGFlexTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<845e100082da2dc28f3ff2cbca24c9ab>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('flex_basis_flex_grow_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(75);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(75);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n});\ntest('flex_shrink_flex_grow_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(100);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(500);\n  root_child1.setHeight(100);\n  root_child1.setFlexShrink(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(250);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(250);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(250);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(250);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(250);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(250);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_shrink_flex_grow_child_flex_shrink_other_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(100);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(500);\n  root_child1.setHeight(100);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(250);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(250);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(250);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(250);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(250);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(250);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_basis_flex_grow_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(75);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(25);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(75);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_basis_flex_shrink_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(100);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexBasis(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('flex_basis_flex_shrink_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(100);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexBasis(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_shrink_to_zero', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(75);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root_child1.setFlexShrink(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(75);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('flex_basis_overrides_main_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(20);\n});\ntest('flex_grow_shrink_at_most', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexShrink(1);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n});\ntest('flex_grow_less_than_factor_one', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(0.2);\n  root_child0.setFlexBasis(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(0.2);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(0.4);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(132);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(132);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(224);\n  expect(root_child2.getComputedWidth()).toBe(200);\n  expect(root_child2.getComputedHeight()).toBe(184);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(132);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(132);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(224);\n  expect(root_child2.getComputedWidth()).toBe(200);\n  expect(root_child2.getComputedHeight()).toBe(184);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGFlexWrapTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<7fb4c69ffa58579fd0ce6fd9b61210bf>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexWrapTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest.skip('wrap_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(30);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(30);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(30);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(60);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(30);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(60);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(-30);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n});\ntest('wrap_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(30);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(30);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(30);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n});\ntest('wrap_row_align_items_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(30);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n});\ntest('wrap_row_align_items_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(30);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(5);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(60);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(5);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(30);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(30);\n});\ntest('flex_wrap_children_with_min_main_overriding_flex_basis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(50);\n  root_child0.setHeight(50);\n  root_child0.setMinWidth(55);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexBasis(50);\n  root_child1.setHeight(50);\n  root_child1.setMinWidth(55);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(55);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(55);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(45);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(55);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(45);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(55);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('flex_wrap_wrap_to_child_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setAlignItems(Align.FlexStart);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(100);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0.setWidth(100);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_wrap_align_stretch_fits_one_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(150);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(150);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(0);\n});\ntest('wrap_reverse_row_align_content_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(40);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrap_reverse_row_align_content_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.WrapReverse);\n  root.setAlignContent(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(40);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrap_reverse_row_single_line_different_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.WrapReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(40);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(90);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(120);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(270);\n  expect(root_child0.getComputedTop()).toBe(40);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(240);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(210);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(180);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(150);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrap_reverse_row_align_content_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.WrapReverse);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(40);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrap_reverse_row_align_content_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.WrapReverse);\n  root.setAlignContent(Align.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(70);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(10);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(40);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrap_reverse_column_fixed_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.WrapReverse);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(30);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root_child1.setWidth(30);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setHeight(40);\n  root_child3.setWidth(30);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setHeight(50);\n  root_child4.setWidth(30);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(170);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(170);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(170);\n  expect(root_child2.getComputedTop()).toBe(30);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(170);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(140);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(30);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(30);\n  expect(root_child3.getComputedHeight()).toBe(40);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(30);\n  expect(root_child4.getComputedHeight()).toBe(50);\n});\ntest('wrapped_row_within_align_items_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(150);\n  root_child0_child0.setHeight(80);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(80);\n  root_child0_child1.setHeight(80);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(120);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n});\ntest('wrapped_row_within_align_items_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(150);\n  root_child0_child0.setHeight(80);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(80);\n  root_child0_child1.setHeight(80);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(120);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n});\ntest('wrapped_row_within_align_items_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(150);\n  root_child0_child0.setHeight(80);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(80);\n  root_child0_child1.setHeight(80);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(160);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(150);\n  expect(root_child0_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(120);\n  expect(root_child0_child1.getComputedTop()).toBe(80);\n  expect(root_child0_child1.getComputedWidth()).toBe(80);\n  expect(root_child0_child1.getComputedHeight()).toBe(80);\n});\ntest('wrapped_column_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(700);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n  root.setAlignContent(Align.Center);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(500);\n  root_child0.setMaxHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(200);\n  root_child1.setHeight(200);\n  root_child1.setMargin(Edge.All, 20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(700);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(250);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(200);\n  expect(root_child1.getComputedTop()).toBe(250);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  expect(root_child2.getComputedLeft()).toBe(420);\n  expect(root_child2.getComputedTop()).toBe(200);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(700);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(350);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(300);\n  expect(root_child1.getComputedTop()).toBe(250);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  expect(root_child2.getComputedLeft()).toBe(180);\n  expect(root_child2.getComputedTop()).toBe(200);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('wrapped_column_max_height_flex', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n  root.setWidth(700);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n  root.setAlignContent(Align.Center);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(500);\n  root_child0.setMaxHeight(200);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(200);\n  root_child1.setHeight(200);\n  root_child1.setMargin(Edge.All, 20);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(700);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(300);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(180);\n\n  expect(root_child1.getComputedLeft()).toBe(250);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(180);\n\n  expect(root_child2.getComputedLeft()).toBe(300);\n  expect(root_child2.getComputedTop()).toBe(400);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(700);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(300);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(180);\n\n  expect(root_child1.getComputedLeft()).toBe(250);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(180);\n\n  expect(root_child2.getComputedLeft()).toBe(300);\n  expect(root_child2.getComputedTop()).toBe(400);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('wrap_nodes_with_content_sizing_overflowing_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setWidth(85);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(40);\n  root_child0_child0_child0.setWidth(40);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setMargin(Edge.Right, 10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child1_child0.setHeight(40);\n  root_child0_child1_child0.setWidth(40);\n  root_child0_child1.insertChild(root_child0_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(85);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(40);\n  expect(root_child0_child1.getComputedWidth()).toBe(40);\n  expect(root_child0_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(415);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(85);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(45);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(35);\n  expect(root_child0_child1.getComputedTop()).toBe(40);\n  expect(root_child0_child1.getComputedWidth()).toBe(40);\n  expect(root_child0_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(40);\n});\ntest('wrap_nodes_with_content_sizing_margin_cross', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setWidth(70);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(40);\n  root_child0_child0_child0.setWidth(40);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setMargin(Edge.Top, 10);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child1_child0.setHeight(40);\n  root_child0_child1_child0.setWidth(40);\n  root_child0_child1.insertChild(root_child0_child1_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(70);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(40);\n  expect(root_child0_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(430);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(70);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(30);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(30);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(40);\n  expect(root_child0_child1.getComputedHeight()).toBe(40);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(40);\n});\ntest('wrap_with_min_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMinHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('wrap_with_max_cross_axis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setMaxHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(400);\n  root_child1.setHeight(200);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(400);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('nowrap_expands_flexline_box_to_min_cross', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(400);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(400);\n});\ntest('wrap_does_not_impose_min_cross_onto_single_flexline', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(400);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGGapTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<155c006bb0b57fbfe652cb9eb71d1c66>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGGapTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('column_gap_flexible', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(80);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_inflexible', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(80);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_mixed_flexible', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(80);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_child_margins', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(80);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setMargin(Edge.Horizontal, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root_child1.setMargin(Edge.Horizontal, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root_child2.setMargin(Edge.Horizontal, 15);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(2);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(26);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(2);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(63);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(2);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(76);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(52);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(2);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(15);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(2);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_row_gap_wrapping', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(80);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n\n  const root_child6 = Yoga.Node.create(config);\n  root_child6.setWidth(20);\n  root_child6.setHeight(20);\n  root.insertChild(root_child6, 6);\n\n  const root_child7 = Yoga.Node.create(config);\n  root_child7.setWidth(20);\n  root_child7.setHeight(20);\n  root.insertChild(root_child7, 7);\n\n  const root_child8 = Yoga.Node.create(config);\n  root_child8.setWidth(20);\n  root_child8.setHeight(20);\n  root.insertChild(root_child8, 8);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(40);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(40);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(40);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  expect(root_child6.getComputedLeft()).toBe(0);\n  expect(root_child6.getComputedTop()).toBe(80);\n  expect(root_child6.getComputedWidth()).toBe(20);\n  expect(root_child6.getComputedHeight()).toBe(20);\n\n  expect(root_child7.getComputedLeft()).toBe(30);\n  expect(root_child7.getComputedTop()).toBe(80);\n  expect(root_child7.getComputedWidth()).toBe(20);\n  expect(root_child7.getComputedHeight()).toBe(20);\n\n  expect(root_child8.getComputedLeft()).toBe(60);\n  expect(root_child8.getComputedTop()).toBe(80);\n  expect(root_child8.getComputedWidth()).toBe(20);\n  expect(root_child8.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(60);\n  expect(root_child3.getComputedTop()).toBe(40);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(40);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(0);\n  expect(root_child5.getComputedTop()).toBe(40);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  expect(root_child6.getComputedLeft()).toBe(60);\n  expect(root_child6.getComputedTop()).toBe(80);\n  expect(root_child6.getComputedWidth()).toBe(20);\n  expect(root_child6.getComputedHeight()).toBe(20);\n\n  expect(root_child7.getComputedLeft()).toBe(30);\n  expect(root_child7.getComputedTop()).toBe(80);\n  expect(root_child7.getComputedWidth()).toBe(20);\n  expect(root_child7.getComputedHeight()).toBe(20);\n\n  expect(root_child8.getComputedLeft()).toBe(0);\n  expect(root_child8.getComputedTop()).toBe(80);\n  expect(root_child8.getComputedWidth()).toBe(20);\n  expect(root_child8.getComputedHeight()).toBe(20);\n});\ntest('column_gap_start_index', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(80);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(60);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n});\ntest('column_gap_justify_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_justify_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.Center);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(70);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_justify_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.FlexEnd);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_justify_space_between', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceBetween);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_justify_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceAround);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(3);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(77);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(77);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(3);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_justify_space_evenly', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceEvenly);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(5);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('column_gap_wrap_align_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(40);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(40);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(40);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(40);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(40);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(40);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n});\ntest('column_gap_wrap_align_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.Center);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(60);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(60);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(60);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(60);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(60);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n});\ntest('column_gap_wrap_align_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.FlexEnd);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(40);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(40);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(80);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(40);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(40);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(40);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(80);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n});\ntest('column_gap_wrap_align_space_between', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceBetween);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(80);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(80);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(80);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(80);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n});\ntest('column_gap_wrap_align_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setAlignContent(Align.SpaceAround);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root_child3.setHeight(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root_child4.setHeight(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root_child5.setHeight(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(70);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(70);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(10);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(70);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(20);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(70);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(20);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(70);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(20);\n});\ntest('column_gap_wrap_align_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setGap(Gutter.Column, 5);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(60);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setMinWidth(60);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setMinWidth(60);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setMinWidth(60);\n  root_child3.setFlexGrow(1);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setMinWidth(60);\n  root_child4.setFlexGrow(1);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(71);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(76);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(72);\n  expect(root_child1.getComputedHeight()).toBe(150);\n\n  expect(root_child2.getComputedLeft()).toBe(153);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(71);\n  expect(root_child2.getComputedHeight()).toBe(150);\n\n  expect(root_child3.getComputedLeft()).toBe(229);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(71);\n  expect(root_child3.getComputedHeight()).toBe(150);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(150);\n  expect(root_child4.getComputedWidth()).toBe(300);\n  expect(root_child4.getComputedHeight()).toBe(150);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(229);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(71);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(153);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(71);\n  expect(root_child1.getComputedHeight()).toBe(150);\n\n  expect(root_child2.getComputedLeft()).toBe(76);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(72);\n  expect(root_child2.getComputedHeight()).toBe(150);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(71);\n  expect(root_child3.getComputedHeight()).toBe(150);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(150);\n  expect(root_child4.getComputedWidth()).toBe(300);\n  expect(root_child4.getComputedHeight()).toBe(150);\n});\ntest('column_gap_determines_parent_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setHeight(100);\n  root.setGap(Gutter.Column, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(30);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(50);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(70);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('row_gap_align_items_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(100);\n  root.setHeight(200);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(90);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(90);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(110);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(90);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(90);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(110);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(90);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(90);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(90);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(90);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(110);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(90);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(110);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(90);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(110);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(90);\n});\ntest('row_gap_align_items_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(100);\n  root.setHeight(200);\n  root.setGap(Gutter.Column, 10);\n  root.setGap(Gutter.Row, 20);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(20);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(20);\n  root.insertChild(root_child4, 4);\n\n  const root_child5 = Yoga.Node.create(config);\n  root_child5.setWidth(20);\n  root.insertChild(root_child5, 5);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(0);\n  expect(root_child3.getComputedTop()).toBe(20);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(0);\n\n  expect(root_child4.getComputedLeft()).toBe(30);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(0);\n\n  expect(root_child5.getComputedLeft()).toBe(60);\n  expect(root_child5.getComputedTop()).toBe(20);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  expect(root_child3.getComputedLeft()).toBe(80);\n  expect(root_child3.getComputedTop()).toBe(20);\n  expect(root_child3.getComputedWidth()).toBe(20);\n  expect(root_child3.getComputedHeight()).toBe(0);\n\n  expect(root_child4.getComputedLeft()).toBe(50);\n  expect(root_child4.getComputedTop()).toBe(20);\n  expect(root_child4.getComputedWidth()).toBe(20);\n  expect(root_child4.getComputedHeight()).toBe(0);\n\n  expect(root_child5.getComputedLeft()).toBe(20);\n  expect(root_child5.getComputedTop()).toBe(20);\n  expect(root_child5.getComputedWidth()).toBe(20);\n  expect(root_child5.getComputedHeight()).toBe(0);\n});\ntest('row_gap_column_child_margins', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(200);\n  root.setGap(Gutter.Row, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setMargin(Edge.Vertical, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root_child1.setMargin(Edge.Vertical, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root_child2.setMargin(Edge.Vertical, 15);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(2);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(42);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(66);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(42);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(143);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(42);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(2);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(42);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(66);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(42);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(143);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(42);\n});\ntest('row_gap_row_wrap_child_margins', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexWrap(Wrap.Wrap);\n  root.setWidth(100);\n  root.setHeight(200);\n  root.setGap(Gutter.Row, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(60);\n  root_child0.setMargin(Edge.Vertical, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(60);\n  root_child1.setMargin(Edge.Vertical, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(60);\n  root_child2.setMargin(Edge.Vertical, 15);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(2);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(24);\n  expect(root_child1.getComputedWidth()).toBe(60);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(59);\n  expect(root_child2.getComputedWidth()).toBe(60);\n  expect(root_child2.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(2);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(24);\n  expect(root_child1.getComputedWidth()).toBe(60);\n  expect(root_child1.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(59);\n  expect(root_child2.getComputedWidth()).toBe(60);\n  expect(root_child2.getComputedHeight()).toBe(0);\n});\ntest('row_gap_determines_parent_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setGap(Gutter.Row, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(30);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(20);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(50);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(30);\n});\ntest('row_gap_percent_wrapping', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(700);\n  root.setPadding(Edge.All, 10);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(138);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(138);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(10);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(190);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(62);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(190);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(62);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(190);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_determines_parent_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(130);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(130);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(200);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(70);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(200);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(200);\n  expect(root_child4.getComputedTop()).toBe(200);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_wrapping_with_both_content_padding_and_item_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(700);\n  root.setPadding(Edge.All, 10);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setPadding(Edge.All, 10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root_child1.setPadding(Edge.All, 10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root_child2.setPadding(Edge.All, 10);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root_child3.setPadding(Edge.All, 10);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root_child4.setPadding(Edge.All, 10);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(138);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(138);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(10);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(190);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(62);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(190);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(62);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(190);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_wrapping_with_both_content_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(700);\n  root.setPadding(Edge.All, 10);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(138);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(138);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(10);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(190);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(62);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(190);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(62);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(190);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_wrapping_with_content_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(700);\n  root.setMargin(Edge.All, 10);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(130);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(170);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(130);\n  expect(root_child3.getComputedTop()).toBe(170);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(340);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(70);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(200);\n  expect(root_child2.getComputedTop()).toBe(170);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(170);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(200);\n  expect(root_child4.getComputedTop()).toBe(340);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_wrapping_with_content_margin_and_padding', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(700);\n  root.setMargin(Edge.All, 10);\n  root.setPadding(Edge.All, 10);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(138);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(10);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(138);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(10);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(10);\n  expect(root.getComputedTop()).toBe(10);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(700);\n\n  expect(root_child0.getComputedLeft()).toBe(190);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(62);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(190);\n  expect(root_child2.getComputedTop()).toBe(178);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(62);\n  expect(root_child3.getComputedTop()).toBe(178);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(190);\n  expect(root_child4.getComputedTop()).toBe(346);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('row_gap_percent_wrapping_with_flexible_content', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setGap(Gutter.All, \"10%\");\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root_child2.setFlexShrink(1);\n  root_child2.setFlexBasis(\"0%\");\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(80);\n  expect(root_child1.getComputedHeight()).toBe(300);\n\n  expect(root_child2.getComputedLeft()).toBe(220);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(80);\n  expect(root_child2.getComputedHeight()).toBe(300);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(220);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child1.getComputedLeft()).toBe(110);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(80);\n  expect(root_child1.getComputedHeight()).toBe(300);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(80);\n  expect(root_child2.getComputedHeight()).toBe(300);\n});\ntest('row_gap_percent_wrapping_with_mixed_flexible_content', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(300);\n  root.setHeight(300);\n  root.setGap(Gutter.All, \"10%\");\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexShrink(1);\n  root_child1.setFlexBasis(\"0%\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(\"10%\");\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(300);\n\n  expect(root_child2.getComputedLeft()).toBe(270);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(300);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(290);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(300);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(300);\n});\ntest.skip('row_gap_percent_wrapping_with_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMinWidth(300);\n  root.setGap(Gutter.All, \"10%\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root_child2.setHeight(100);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setWidth(100);\n  root_child3.setHeight(100);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setWidth(100);\n  root_child4.setHeight(100);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(130);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(130);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(200);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(70);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(200);\n  expect(root_child2.getComputedTop()).toBe(100);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(70);\n  expect(root_child3.getComputedTop()).toBe(100);\n  expect(root_child3.getComputedWidth()).toBe(100);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(200);\n  expect(root_child4.getComputedTop()).toBe(200);\n  expect(root_child4.getComputedWidth()).toBe(100);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGIntrinsicSizeTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<4ea148a3d3f6abbfb0bdcfc9d7b2779c>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGIntrinsicSizeTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('contains_inner_text_long_word', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1300);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(700);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1300);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('contains_inner_text_no_width_no_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(70);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(70);\n});\ntest('contains_inner_text_no_width_no_height_long_word_in_paragraph', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(70);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(70);\n});\ntest('contains_inner_text_fixed_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(1290);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1900);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(1290);\n});\ntest('contains_inner_text_no_width_fixed_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('contains_inner_text_fixed_width_fixed_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setWidth(50);\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1950);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('contains_inner_text_max_width_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(50);\n  root_child0.setMaxHeight(20);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1950);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('contains_inner_text_max_width_max_height_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(50);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Column}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(1890);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(1890);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(1890);\n\n  expect(root_child0.getComputedLeft()).toBe(1950);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(1890);\n});\ntest('contains_inner_text_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(100);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(1290);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1900);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(1290);\n});\ntest('contains_inner_text_fixed_width_shorter_text', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1900);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('contains_inner_text_fixed_height_shorter_text', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setHeight(100);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(110);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(1890);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(110);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('contains_inner_text_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(2000);\n  root.setHeight(2000);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxHeight(20);\n  root.insertChild(root_child0, 0);\n  root_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(2000);\n  expect(root.getComputedHeight()).toBe(2000);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(2000);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('max_content_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(\"max-content\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(150);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(125);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(25);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('fit_content_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setWidth(\"fit-content\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(75);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest('stretch_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setWidth(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(150);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(450);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(350);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(325);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest('max_content_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(\"max-content\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('fit_content_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"fit-content\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('stretch_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest('max_content_flex_basis_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexBasis(\"max-content\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('fit_content_flex_basis_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(\"fit-content\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest('stretch_flex_basis_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(175);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('max_content_flex_basis_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setFlexBasis(\"max-content\");\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(500);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(600);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(550);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(600);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(500);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(550);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('fit_content_flex_basis_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexBasis(\"fit-content\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(90);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(40);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(-10);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(65);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('stretch_flex_basis_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setFlexBasis(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(150);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(450);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(350);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(325);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('max_content_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMaxWidth(\"max-content\");\n  root.setWidth(200);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(150);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(125);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(25);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('fit_content_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(\"fit-content\");\n  root_child0.setWidth(110);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(75);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('stretch_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(\"stretch\");\n  root_child0.setWidth(600);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(150);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(450);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(350);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(325);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('max_content_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMinWidth(\"max-content\");\n  root.setWidth(100);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(100);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(25);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(150);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(175);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(125);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(25);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('fit_content_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMinWidth(\"fit-content\");\n  root_child0.setWidth(90);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(90);\n  expect(root.getComputedHeight()).toBe(150);\n\n  expect(root_child0.getComputedLeft()).toBe(-10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(75);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('stretch_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMinWidth(\"stretch\");\n  root_child0.setWidth(400);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setHeight(50);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(150);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(450);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(350);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(325);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\ntest.skip('max_content_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxHeight(\"max-content\");\n  root.setHeight(200);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(175);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('fit_content_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxHeight(\"fit-content\");\n  root_child0.setHeight(110);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(100);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(-50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(-100);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('stretch_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxHeight(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setHeight(600);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('max_content_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(\"max-content\");\n  root.setHeight(100);\n  root.setFlexWrap(Wrap.Wrap);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(25);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(-50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(-100);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('fit_content_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(90);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinHeight(\"fit-content\");\n  root_child0.setHeight(90);\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(100);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(90);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(-50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(-100);\n  expect(root_child0_child2.getComputedTop()).toBe(0);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('stretch_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinHeight(\"stretch\");\n  root_child0.setFlexWrap(Wrap.Wrap);\n  root_child0.setHeight(400);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setWidth(50);\n  root_child0_child2.setHeight(25);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(50);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(0);\n  expect(root_child0_child2.getComputedTop()).toBe(150);\n  expect(root_child0_child2.getComputedWidth()).toBe(50);\n  expect(root_child0_child2.getComputedHeight()).toBe(25);\n});\ntest.skip('text_max_content_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"max-content\");\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(-940);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest.skip('text_stretch_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"stretch\");\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('text_fit_content_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"fit-content\");\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(-670);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n});\ntest.skip('text_max_content_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(\"max-content\");\n  root_child0.setWidth(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(-940);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest.skip('text_stretch_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(\"stretch\");\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('text_fit_content_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(\"fit-content\");\n  root_child0.setWidth(300);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(-670);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n});\ntest.skip('text_max_content_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(\"max-content\");\n  root_child0.setWidth(2000);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(-940);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(1140);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest.skip('text_stretch_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(\"stretch\");\n  root_child0.setWidth(300);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('text_fit_content_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMaxWidth(\"fit-content\");\n  root_child0.setWidth(1000);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.insertChild(root_child0_child0, 0);\n  root_child0_child0.setMeasureFunc(instrinsicSizeMeasureFunc.bind({text: \"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\", flexDirection: FlexDirection.Row}));\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(-670);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(870);\n  expect(root_child0.getComputedHeight()).toBe(30);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(870);\n  expect(root_child0_child0.getComputedHeight()).toBe(30);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGJustifyContentTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<a9152a0284e6d31e9c0fc8b43a934fa5>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGJustifyContentTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('justify_content_row_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(20);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(92);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(82);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(72);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_row_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(72);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(82);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(92);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(10);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_row_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(36);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(56);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(56);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(36);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_row_space_between', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(92);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(92);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_row_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(12);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(46);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(12);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_column_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(10);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(20);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_column_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(72);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(82);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(92);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(72);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(82);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(92);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_column_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(36);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(56);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(36);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(56);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_column_space_between', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(92);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(92);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_column_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(12);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(12);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_row_min_width_and_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(50);\n  root.setMargin(Edge.Left, 100);\n  root.setJustifyContent(Justify.Center);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(15);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(15);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('justify_content_row_max_width_and_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setMaxWidth(80);\n  root.setMargin(Edge.Left, 100);\n  root.setJustifyContent(Justify.Center);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(100);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(80);\n  expect(root.getComputedHeight()).toBe(20);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('justify_content_column_min_height_and_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(50);\n  root.setMargin(Edge.Top, 100);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(15);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('justify_content_column_max_height_and_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setMaxHeight(80);\n  root.setMargin(Edge.Top, 100);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(100);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(80);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(30);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('justify_content_column_space_evenly', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(74);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(18);\n  expect(root_child0.getComputedWidth()).toBe(102);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(46);\n  expect(root_child1.getComputedWidth()).toBe(102);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(74);\n  expect(root_child2.getComputedWidth()).toBe(102);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_row_space_evenly', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setJustifyContent(Justify.SpaceEvenly);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(26);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(51);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(77);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(0);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(77);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(51);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(26);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(0);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('justify_content_min_width_with_padding_child_width_greater_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(1000);\n  root.setHeight(1584);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setAlignContent(Align.Stretch);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0.setJustifyContent(Justify.Center);\n  root_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0.setMinWidth(400);\n  root_child0_child0.setPadding(Edge.Left, 100);\n  root_child0_child0.setPadding(Edge.Right, 100);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0.setWidth(300);\n  root_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1000);\n  expect(root.getComputedHeight()).toBe(1584);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1000);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(300);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1000);\n  expect(root.getComputedHeight()).toBe(1584);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1000);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(500);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(500);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(300);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('justify_content_min_width_with_padding_child_width_lower_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(1080);\n  root.setHeight(1584);\n  root.setAlignContent(Align.Stretch);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setAlignContent(Align.Stretch);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0.setJustifyContent(Justify.Center);\n  root_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0.setMinWidth(400);\n  root_child0_child0.setPadding(Edge.Left, 100);\n  root_child0_child0.setPadding(Edge.Right, 100);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0.setWidth(199);\n  root_child0_child0_child0.setAlignContent(Align.Stretch);\n  root_child0_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1080);\n  expect(root.getComputedHeight()).toBe(1584);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(400);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(101);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(199);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(1080);\n  expect(root.getComputedHeight()).toBe(1584);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(1080);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(680);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(400);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(101);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(199);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('justify_content_space_between_indefinite_container_dim_with_free_space', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(300);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMinWidth(200);\n  root_child0.setJustifyContent(Justify.SpaceBetween);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(50);\n  root_child0_child0.setHeight(50);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0_child1.setHeight(50);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(150);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(300);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(150);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n});\ntest('justify_content_flex_start_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('justify_content_flex_end_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.RowReverse);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(20);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(20);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(40);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(20);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('justify_content_overflow_row_flex_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-18);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_flex_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(-18);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(62);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(-9);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(31);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(71);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(71);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(31);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-9);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_space_between', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceBetween);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-18);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-18);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_space_evenly', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-18);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest.skip('justify_content_overflow_row_reverse_space_around', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setJustifyContent(Justify.SpaceAround);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(-18);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(62);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest.skip('justify_content_overflow_row_reverse_space_evenly', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.RowReverse);\n  root.setJustifyContent(Justify.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(-18);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(62);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\ntest('justify_content_overflow_row_space_evenly_auto_margin', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(102);\n  root.setHeight(102);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.SpaceEvenly);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(40);\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(40);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(40);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(80);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(102);\n  expect(root.getComputedHeight()).toBe(102);\n\n  expect(root_child0.getComputedLeft()).toBe(62);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(40);\n  expect(root_child0.getComputedHeight()).toBe(102);\n\n  expect(root_child1.getComputedLeft()).toBe(22);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(102);\n\n  expect(root_child2.getComputedLeft()).toBe(-18);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(40);\n  expect(root_child2.getComputedHeight()).toBe(102);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGMarginTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<a49cde768071e62194ae9bae9b03d422>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMarginTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('margin_start', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setMargin(Edge.Start, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setMargin(Edge.Top, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('margin_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setMargin(Edge.End, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setJustifyContent(Justify.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setMargin(Edge.Bottom, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('margin_and_flex_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Start, 10);\n  root_child0.setMargin(Edge.End, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_and_flex_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 10);\n  root_child0.setMargin(Edge.Bottom, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('margin_and_stretch_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 10);\n  root_child0.setMargin(Edge.Bottom, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('margin_and_stretch_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Start, 10);\n  root_child0.setMargin(Edge.End, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_with_sibling_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.End, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(45);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(55);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(45);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(55);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(45);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(45);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('margin_with_sibling_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Bottom, 10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(45);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(45);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(45);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(55);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(45);\n});\ntest('margin_auto_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Bottom, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_bottom_and_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root_child0.setMargin(Edge.Bottom, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_bottom_and_top_justify_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root_child0.setMargin(Edge.Bottom, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_multiple_children_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root_child1.setMargin(Edge.Top, \"auto\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(25);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(25);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(100);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(75);\n  expect(root_child2.getComputedTop()).toBe(150);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_multiple_children_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root_child1.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(150);\n  expect(root_child2.getComputedTop()).toBe(75);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(125);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(75);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left_and_right_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left_and_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_start_and_end_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Start, \"auto\");\n  root_child0.setMargin(Edge.End, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(75);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_start_and_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Start, \"auto\");\n  root_child0.setMargin(Edge.End, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left_and_right_column_and_center', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left_and_right_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_top_and_bottom_stretch', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root_child0.setMargin(Edge.Bottom, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(50);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(150);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_should_not_be_part_of_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(250);\n  root.setHeight(250);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setMaxHeight(100);\n  root_child0.setMargin(Edge.Top, 20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(250);\n  expect(root.getComputedHeight()).toBe(250);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(250);\n  expect(root.getComputedHeight()).toBe(250);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_should_not_be_part_of_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(250);\n  root.setHeight(250);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setMaxWidth(100);\n  root_child0.setMargin(Edge.Left, 20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(250);\n  expect(root.getComputedHeight()).toBe(250);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(250);\n  expect(root.getComputedHeight()).toBe(250);\n\n  expect(root_child0.getComputedLeft()).toBe(150);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('margin_auto_left_right_child_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(72);\n  root_child0.setHeight(72);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-20);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n});\ntest('margin_auto_left_child_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(72);\n  root_child0.setHeight(72);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-20);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n});\ntest('margin_fix_left_auto_right_child_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(72);\n  root_child0.setHeight(72);\n  root_child0.setMargin(Edge.Left, 10);\n  root_child0.setMargin(Edge.Right, \"auto\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-20);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n});\ntest('margin_auto_left_fix_right_child_bigger_than_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(52);\n  root.setWidth(52);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(72);\n  root_child0.setHeight(72);\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root_child0.setMargin(Edge.Right, 10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(52);\n  expect(root.getComputedHeight()).toBe(52);\n\n  expect(root_child0.getComputedLeft()).toBe(-30);\n  expect(root_child0.getComputedTop()).toBe(-10);\n  expect(root_child0.getComputedWidth()).toBe(72);\n  expect(root_child0.getComputedHeight()).toBe(72);\n});\ntest('margin_auto_top_stretching_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setMargin(Edge.Top, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_left_stretching_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(\"0%\");\n  root_child0.setMargin(Edge.Left, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(200);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('margin_auto_overflowing_container', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(150);\n  root_child0.setMargin(Edge.Bottom, \"auto\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(150);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(150);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(150);\n\n  expect(root_child1.getComputedLeft()).toBe(75);\n  expect(root_child1.getComputedTop()).toBe(150);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(150);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGMinMaxDimensionTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<3129371b8f89a7343860ea2b7714b7eb>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMinMaxDimensionTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setMaxWidth(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setMaxHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\ntest.skip('min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setMinHeight(60);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(60);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(40);\n});\ntest.skip('min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setMinWidth(60);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(60);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('justify_content_min_max', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxHeight(200);\n  root.setMinHeight(100);\n  root.setWidth(100);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(60);\n  root_child0.setHeight(60);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n});\ntest('align_items_min_max', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxWidth(200);\n  root.setMinWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(60);\n  root_child0.setHeight(60);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n});\ntest('justify_content_overflow_min_max', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(100);\n  root.setMaxHeight(110);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(50);\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(50);\n  root_child2.setHeight(50);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(110);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-20);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(50);\n  expect(root.getComputedHeight()).toBe(110);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(-20);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(30);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(80);\n  expect(root_child2.getComputedWidth()).toBe(50);\n  expect(root_child2.getComputedHeight()).toBe(50);\n});\ntest('flex_grow_to_min', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(100);\n  root.setMaxHeight(500);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('flex_grow_in_at_most_container', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexBasis(0);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(0);\n  expect(root_child0_child0.getComputedHeight()).toBe(0);\n});\ntest('flex_grow_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(0);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_within_constrained_min_max_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(100);\n  root.setMaxHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('flex_grow_within_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(20);\n  root_child0_child0.setFlexGrow(1);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n});\ntest('flex_grow_within_constrained_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root_child0.setMaxWidth(300);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(20);\n  root_child0_child0.setFlexGrow(1);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(20);\n});\ntest('flex_root_ignored', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setMinHeight(100);\n  root.setMaxHeight(500);\n  root.setFlexGrow(1);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(200);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(100);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(200);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_root_minimized', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setMinHeight(100);\n  root.setMaxHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinHeight(100);\n  root_child0.setMaxHeight(500);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexBasis(200);\n  root_child0_child0.setFlexGrow(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(300);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(300);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_height_maximized', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(500);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinHeight(100);\n  root_child0.setMaxHeight(500);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexBasis(200);\n  root_child0_child0.setFlexGrow(1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setHeight(100);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(400);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(400);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_within_constrained_min_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(50);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(50);\n  expect(root_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_within_constrained_min_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(0);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('flex_grow_within_constrained_max_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setMaxWidth(100);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexShrink(1);\n  root_child0_child0.setFlexBasis(100);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(50);\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n});\ntest('flex_grow_within_constrained_max_column', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexShrink(1);\n  root_child0.setFlexBasis(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(50);\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('child_min_max_width_flexing', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(120);\n  root.setHeight(50);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(60);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(0);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setMaxWidth(20);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexBasis(\"50%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(120);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(120);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(20);\n  expect(root_child1.getComputedHeight()).toBe(50);\n});\ntest('min_width_overrides_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(100);\n  root.setWidth(50);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(0);\n});\ntest('max_width_overrides_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxWidth(100);\n  root.setWidth(200);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(0);\n});\ntest('min_height_overrides_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinHeight(100);\n  root.setHeight(50);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('max_height_overrides_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxHeight(100);\n  root.setHeight(200);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(100);\n});\ntest('min_max_percent_no_width_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMinWidth(\"10%\");\n  root_child0.setMaxWidth(\"10%\");\n  root_child0.setMinHeight(\"10%\");\n  root_child0.setMaxHeight(\"10%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGPaddingTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<d224427dab9cd773b19af91c17542add>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPaddingTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('padding_no_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setPadding(Edge.All, 10);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(20);\n  expect(root.getComputedHeight()).toBe(20);\n});\ntest('padding_container_match_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setPadding(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(30);\n  expect(root.getComputedHeight()).toBe(30);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('padding_flex_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(80);\n});\ntest('padding_stretch_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.All, 10);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(10);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(80);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('padding_center_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setPadding(Edge.Start, 10);\n  root.setPadding(Edge.End, 20);\n  root.setPadding(Edge.Bottom, 20);\n  root.setAlignItems(Align.Center);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setWidth(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(35);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(35);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('child_with_padding_align_end', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setJustifyContent(Justify.FlexEnd);\n  root.setAlignItems(Align.FlexEnd);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setPadding(Edge.All, 20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(100);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(100);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('physical_and_relative_edge_defined', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setPadding(Edge.Left, 20);\n  root.setPadding(Edge.End, 50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"100%\");\n  root_child0.setHeight(50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(130);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(150);\n  expect(root_child0.getComputedHeight()).toBe(50);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGPercentageTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<3fc7c70c4c88b411b1d9dbaf7572284a>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPercentageTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('percentage_width_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"30%\");\n  root_child0.setHeight(\"30%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(140);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(60);\n});\ntest('percentage_position_left_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(400);\n  root.setHeight(400);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"45%\");\n  root_child0.setHeight(\"55%\");\n  root_child0.setPosition(Edge.Left, \"10%\");\n  root_child0.setPosition(Edge.Top, \"20%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(40);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(180);\n  expect(root_child0.getComputedHeight()).toBe(220);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(260);\n  expect(root_child0.getComputedTop()).toBe(80);\n  expect(root_child0.getComputedWidth()).toBe(180);\n  expect(root_child0.getComputedHeight()).toBe(220);\n});\ntest('percentage_position_bottom_right', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(500);\n  root.setHeight(500);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"55%\");\n  root_child0.setHeight(\"15%\");\n  root_child0.setPosition(Edge.Bottom, \"10%\");\n  root_child0.setPosition(Edge.Right, \"20%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0.getComputedTop()).toBe(-50);\n  expect(root_child0.getComputedWidth()).toBe(275);\n  expect(root_child0.getComputedHeight()).toBe(75);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(500);\n  expect(root.getComputedHeight()).toBe(500);\n\n  expect(root_child0.getComputedLeft()).toBe(125);\n  expect(root_child0.getComputedTop()).toBe(-50);\n  expect(root_child0.getComputedWidth()).toBe(275);\n  expect(root_child0.getComputedHeight()).toBe(75);\n});\ntest('percentage_flex_basis', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"50%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexBasis(\"25%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(125);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(125);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(75);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(75);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(125);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(75);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('percentage_flex_basis_cross', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"50%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root_child1.setFlexBasis(\"25%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(125);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(125);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(75);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(125);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(125);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(75);\n});\ntest.skip('percentage_flex_basis_cross_min_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setMinHeight(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(2);\n  root_child1.setMinHeight(\"10%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(120);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(80);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(120);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(80);\n});\ntest('percentage_flex_basis_main_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"10%\");\n  root_child0.setMaxHeight(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"10%\");\n  root_child1.setMaxHeight(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(52);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(52);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(148);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(148);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(52);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(148);\n  expect(root_child1.getComputedHeight()).toBe(40);\n});\ntest('percentage_flex_basis_cross_max_height', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"10%\");\n  root_child0.setMaxHeight(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"10%\");\n  root_child1.setMaxHeight(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(120);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(40);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(120);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(120);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(40);\n});\ntest('percentage_flex_basis_main_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"15%\");\n  root_child0.setMaxWidth(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"10%\");\n  root_child1.setMaxWidth(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(120);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(40);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('percentage_flex_basis_cross_max_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"10%\");\n  root_child0.setMaxWidth(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"15%\");\n  root_child1.setMaxWidth(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(150);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(160);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(40);\n  expect(root_child1.getComputedHeight()).toBe(150);\n});\ntest('percentage_flex_basis_main_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"15%\");\n  root_child0.setMinWidth(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"10%\");\n  root_child1.setMinWidth(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(120);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(80);\n  expect(root_child1.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(80);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(120);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(80);\n  expect(root_child1.getComputedHeight()).toBe(200);\n});\ntest('percentage_flex_basis_cross_min_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"10%\");\n  root_child0.setMinWidth(\"60%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"15%\");\n  root_child1.setMinWidth(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(150);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(50);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(150);\n});\ntest('percentage_multiple_nested_with_padding_margin_and_percentage_values', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(200);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(\"10%\");\n  root_child0.setMinWidth(\"60%\");\n  root_child0.setMargin(Edge.All, 5);\n  root_child0.setPadding(Edge.All, 3);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"50%\");\n  root_child0_child0.setMargin(Edge.All, 5);\n  root_child0_child0.setPadding(Edge.All, \"3%\");\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(\"45%\");\n  root_child0_child0_child0.setMargin(Edge.All, \"5%\");\n  root_child0_child0_child0.setPadding(Edge.All, 3);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(4);\n  root_child1.setFlexBasis(\"15%\");\n  root_child1.setMinWidth(\"20%\");\n  root.insertChild(root_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(190);\n  expect(root_child0.getComputedHeight()).toBe(48);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(8);\n  expect(root_child0_child0.getComputedTop()).toBe(8);\n  expect(root_child0_child0.getComputedWidth()).toBe(92);\n  expect(root_child0_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(10);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(36);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(6);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(58);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(142);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(5);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(190);\n  expect(root_child0.getComputedHeight()).toBe(48);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(90);\n  expect(root_child0_child0.getComputedTop()).toBe(8);\n  expect(root_child0_child0.getComputedWidth()).toBe(92);\n  expect(root_child0_child0.getComputedHeight()).toBe(25);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(46);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(10);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(36);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(6);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(58);\n  expect(root_child1.getComputedWidth()).toBe(200);\n  expect(root_child1.getComputedHeight()).toBe(142);\n});\ntest('percentage_margin_should_calculate_based_only_on_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setMargin(Edge.All, \"10%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(160);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(20);\n  expect(root_child0.getComputedTop()).toBe(20);\n  expect(root_child0.getComputedWidth()).toBe(160);\n  expect(root_child0.getComputedHeight()).toBe(60);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(150);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest('percentage_padding_should_calculate_based_only_on_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root_child0.setPadding(Edge.All, \"10%\");\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(10);\n  root_child0_child0.setHeight(10);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(20);\n  expect(root_child0_child0.getComputedTop()).toBe(20);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(170);\n  expect(root_child0_child0.getComputedTop()).toBe(20);\n  expect(root_child0_child0.getComputedWidth()).toBe(10);\n  expect(root_child0_child0.getComputedHeight()).toBe(10);\n});\ntest('percentage_absolute_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(200);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setPosition(Edge.Top, \"10%\");\n  root_child0.setPosition(Edge.Left, \"30%\");\n  root_child0.setWidth(10);\n  root_child0.setHeight(10);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(60);\n  expect(root_child0.getComputedTop()).toBe(10);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(10);\n});\ntest('percentage_width_height_undefined_parent_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(\"50%\");\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(0);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(0);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(0);\n});\ntest('percent_within_flex_grow', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setWidth(350);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(\"100%\");\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(100);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(350);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(150);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(150);\n  expect(root_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(250);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(350);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(250);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(100);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(150);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(150);\n  expect(root_child1_child0.getComputedHeight()).toBe(0);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('percentage_container_in_wrapping_container', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setAlignItems(Align.Center);\n  root.setWidth(200);\n  root.setHeight(200);\n  root.setJustifyContent(Justify.Center);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setFlexDirection(FlexDirection.Row);\n  root_child0_child0.setJustifyContent(Justify.Center);\n  root_child0_child0.setWidth(\"100%\");\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(50);\n  root_child0_child0_child1.setHeight(50);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(75);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(50);\n});\ntest('percent_absolute_position', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(50);\n  root_child0.setWidth(\"100%\");\n  root_child0.setPosition(Edge.Left, \"50%\");\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(\"100%\");\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setWidth(\"100%\");\n  root_child0.insertChild(root_child0_child1, 1);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(60);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(60);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(60);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(60);\n  expect(root_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(60);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(-60);\n  expect(root_child0_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1.getComputedWidth()).toBe(60);\n  expect(root_child0_child1.getComputedHeight()).toBe(50);\n});\ntest('percent_of_minmax_main', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMinWidth(60);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('percent_of_min_main', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMinWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('percent_of_min_main_multiple', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMinWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(\"50%\");\n  root_child1.setHeight(20);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(\"50%\");\n  root_child2.setHeight(20);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(30);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(60);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(30);\n  expect(root_child1.getComputedHeight()).toBe(20);\n\n  expect(root_child2.getComputedLeft()).toBe(-30);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(30);\n  expect(root_child2.getComputedHeight()).toBe(20);\n});\ntest.skip('percent_of_max_main', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setFlexDirection(FlexDirection.Row);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('percent_of_minmax_cross_stretched', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(60);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('percent_absolute_of_minmax_cross_stretched', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(60);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root_child0.setPositionType(PositionType.Absolute);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('percent_of_minmax_cross_unstretched', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(60);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest.skip('percent_of_min_cross_unstretched', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMinWidth(60);\n  root.setHeight(50);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(60);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(30);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(30);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\ntest('percent_of_max_cross_unstretched', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setMaxWidth(60);\n  root.setHeight(50);\n  root.setAlignItems(Align.FlexStart);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(\"50%\");\n  root_child0.setHeight(20);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(20);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(0);\n  expect(root.getComputedHeight()).toBe(50);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(0);\n  expect(root_child0.getComputedHeight()).toBe(20);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGRoundingTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<f18068ee290a315e824e39340d4f4195>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGRoundingTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('rounding_flex_basis_flex_grow_row_width_of_100', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(33);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(33);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(34);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(67);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(33);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(67);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(33);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(33);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(34);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(33);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('rounding_flex_basis_flex_grow_row_prime_number_width', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(113);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n\n  const root_child3 = Yoga.Node.create(config);\n  root_child3.setFlexGrow(1);\n  root.insertChild(root_child3, 3);\n\n  const root_child4 = Yoga.Node.create(config);\n  root_child4.setFlexGrow(1);\n  root.insertChild(root_child4, 4);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(113);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(23);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(23);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(22);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(45);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(23);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(68);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(22);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(90);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(23);\n  expect(root_child4.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(113);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(90);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(23);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(68);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(22);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(45);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(23);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  expect(root_child3.getComputedLeft()).toBe(23);\n  expect(root_child3.getComputedTop()).toBe(0);\n  expect(root_child3.getComputedWidth()).toBe(22);\n  expect(root_child3.getComputedHeight()).toBe(100);\n\n  expect(root_child4.getComputedLeft()).toBe(0);\n  expect(root_child4.getComputedTop()).toBe(0);\n  expect(root_child4.getComputedWidth()).toBe(23);\n  expect(root_child4.getComputedHeight()).toBe(100);\n});\ntest('rounding_flex_basis_flex_shrink_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(101);\n  root.setHeight(100);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setFlexBasis(100);\n  root_child0.setFlexShrink(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setFlexBasis(25);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setFlexBasis(25);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(101);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(51);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(51);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(76);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(101);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(50);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(51);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child1.getComputedLeft()).toBe(25);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(25);\n  expect(root_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(25);\n  expect(root_child2.getComputedHeight()).toBe(100);\n});\ntest('rounding_flex_basis_overrides_main_size', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(113);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n});\ntest('rounding_total_fractial', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(113.4);\n  root.setWidth(87.4);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20.3);\n  root_child0.setFlexGrow(0.7);\n  root_child0.setFlexBasis(50.3);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1.6);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10.7);\n  root_child2.setFlexGrow(1.1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(87);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(87);\n  expect(root_child0.getComputedHeight()).toBe(59);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(59);\n  expect(root_child1.getComputedWidth()).toBe(87);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(87);\n  expect(root_child2.getComputedHeight()).toBe(24);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(87);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(87);\n  expect(root_child0.getComputedHeight()).toBe(59);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(59);\n  expect(root_child1.getComputedWidth()).toBe(87);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(87);\n  expect(root_child2.getComputedHeight()).toBe(24);\n});\ntest('rounding_total_fractial_nested', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(113.4);\n  root.setWidth(87.4);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20.3);\n  root_child0.setFlexGrow(0.7);\n  root_child0.setFlexBasis(50.3);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPosition(Edge.Bottom, 13.3);\n  root_child0_child0.setHeight(9.9);\n  root_child0_child0.setFlexGrow(1);\n  root_child0_child0.setFlexBasis(0.3);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setPosition(Edge.Top, 13.3);\n  root_child0_child1.setHeight(1.1);\n  root_child0_child1.setFlexGrow(4);\n  root_child0_child1.setFlexBasis(0.3);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1.6);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10.7);\n  root_child2.setFlexGrow(1.1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(87);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(87);\n  expect(root_child0.getComputedHeight()).toBe(59);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(-13);\n  expect(root_child0_child0.getComputedWidth()).toBe(87);\n  expect(root_child0_child0.getComputedHeight()).toBe(12);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(25);\n  expect(root_child0_child1.getComputedWidth()).toBe(87);\n  expect(root_child0_child1.getComputedHeight()).toBe(47);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(59);\n  expect(root_child1.getComputedWidth()).toBe(87);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(87);\n  expect(root_child2.getComputedHeight()).toBe(24);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(87);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(87);\n  expect(root_child0.getComputedHeight()).toBe(59);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(-13);\n  expect(root_child0_child0.getComputedWidth()).toBe(87);\n  expect(root_child0_child0.getComputedHeight()).toBe(12);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1.getComputedTop()).toBe(25);\n  expect(root_child0_child1.getComputedWidth()).toBe(87);\n  expect(root_child0_child1.getComputedHeight()).toBe(47);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(59);\n  expect(root_child1.getComputedWidth()).toBe(87);\n  expect(root_child1.getComputedHeight()).toBe(30);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(87);\n  expect(root_child2.getComputedHeight()).toBe(24);\n});\ntest('rounding_fractial_input_1', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(113.4);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n});\ntest('rounding_fractial_input_2', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(113.6);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(114);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(24);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(114);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(65);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(24);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest('rounding_fractial_input_3', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setPosition(Edge.Top, 0.3);\n  root.setHeight(113.4);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(114);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(24);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(25);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(114);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(65);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(24);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(25);\n});\ntest('rounding_fractial_input_4', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setPosition(Edge.Top, 0.7);\n  root.setHeight(113.4);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(20);\n  root_child0.setFlexGrow(1);\n  root_child0.setFlexBasis(50);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(1);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(1);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(113);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(64);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(64);\n  expect(root_child1.getComputedWidth()).toBe(100);\n  expect(root_child1.getComputedHeight()).toBe(25);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(89);\n  expect(root_child2.getComputedWidth()).toBe(100);\n  expect(root_child2.getComputedHeight()).toBe(24);\n});\ntest('rounding_inner_node_controversy_horizontal', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(320);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setHeight(10);\n  root_child1_child0.setFlexGrow(1);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(107);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(107);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(106);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(106);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(213);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(107);\n  expect(root_child2.getComputedHeight()).toBe(10);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(320);\n  expect(root.getComputedHeight()).toBe(10);\n\n  expect(root_child0.getComputedLeft()).toBe(213);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(107);\n  expect(root_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child1.getComputedLeft()).toBe(107);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(106);\n  expect(root_child1.getComputedHeight()).toBe(10);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(106);\n  expect(root_child1_child0.getComputedHeight()).toBe(10);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(107);\n  expect(root_child2.getComputedHeight()).toBe(10);\n});\ntest('rounding_inner_node_controversy_vertical', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(320);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(10);\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setWidth(10);\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(10);\n  root_child1_child0.setFlexGrow(1);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setWidth(10);\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(10);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(107);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(107);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(10);\n  expect(root_child1_child0.getComputedHeight()).toBe(106);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(107);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(10);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(10);\n  expect(root_child0.getComputedHeight()).toBe(107);\n\n  expect(root_child1.getComputedLeft()).toBe(0);\n  expect(root_child1.getComputedTop()).toBe(107);\n  expect(root_child1.getComputedWidth()).toBe(10);\n  expect(root_child1.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(10);\n  expect(root_child1_child0.getComputedHeight()).toBe(106);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(213);\n  expect(root_child2.getComputedWidth()).toBe(10);\n  expect(root_child2.getComputedHeight()).toBe(107);\n});\ntest('rounding_inner_node_controversy_combined', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(640);\n  root.setHeight(320);\n  root.setFlexDirection(FlexDirection.Row);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"100%\");\n  root_child0.setFlexGrow(1);\n  root.insertChild(root_child0, 0);\n\n  const root_child1 = Yoga.Node.create(config);\n  root_child1.setHeight(\"100%\");\n  root_child1.setFlexGrow(1);\n  root.insertChild(root_child1, 1);\n\n  const root_child1_child0 = Yoga.Node.create(config);\n  root_child1_child0.setWidth(\"100%\");\n  root_child1_child0.setFlexGrow(1);\n  root_child1.insertChild(root_child1_child0, 0);\n\n  const root_child1_child1 = Yoga.Node.create(config);\n  root_child1_child1.setWidth(\"100%\");\n  root_child1_child1.setFlexGrow(1);\n  root_child1.insertChild(root_child1_child1, 1);\n\n  const root_child1_child1_child0 = Yoga.Node.create(config);\n  root_child1_child1_child0.setFlexGrow(1);\n  root_child1_child1_child0.setWidth(\"100%\");\n  root_child1_child1.insertChild(root_child1_child1_child0, 0);\n\n  const root_child1_child2 = Yoga.Node.create(config);\n  root_child1_child2.setWidth(\"100%\");\n  root_child1_child2.setFlexGrow(1);\n  root_child1.insertChild(root_child1_child2, 2);\n\n  const root_child2 = Yoga.Node.create(config);\n  root_child2.setHeight(\"100%\");\n  root_child2.setFlexGrow(1);\n  root.insertChild(root_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(640);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(213);\n  expect(root_child0.getComputedHeight()).toBe(320);\n\n  expect(root_child1.getComputedLeft()).toBe(213);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(214);\n  expect(root_child1.getComputedHeight()).toBe(320);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(214);\n  expect(root_child1_child0.getComputedHeight()).toBe(107);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(107);\n  expect(root_child1_child1.getComputedWidth()).toBe(214);\n  expect(root_child1_child1.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child1_child0.getComputedWidth()).toBe(214);\n  expect(root_child1_child1_child0.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(0);\n  expect(root_child1_child2.getComputedTop()).toBe(213);\n  expect(root_child1_child2.getComputedWidth()).toBe(214);\n  expect(root_child1_child2.getComputedHeight()).toBe(107);\n\n  expect(root_child2.getComputedLeft()).toBe(427);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(213);\n  expect(root_child2.getComputedHeight()).toBe(320);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(640);\n  expect(root.getComputedHeight()).toBe(320);\n\n  expect(root_child0.getComputedLeft()).toBe(427);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(213);\n  expect(root_child0.getComputedHeight()).toBe(320);\n\n  expect(root_child1.getComputedLeft()).toBe(213);\n  expect(root_child1.getComputedTop()).toBe(0);\n  expect(root_child1.getComputedWidth()).toBe(214);\n  expect(root_child1.getComputedHeight()).toBe(320);\n\n  expect(root_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child0.getComputedWidth()).toBe(214);\n  expect(root_child1_child0.getComputedHeight()).toBe(107);\n\n  expect(root_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child1_child1.getComputedTop()).toBe(107);\n  expect(root_child1_child1.getComputedWidth()).toBe(214);\n  expect(root_child1_child1.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child1_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child1_child1_child0.getComputedWidth()).toBe(214);\n  expect(root_child1_child1_child0.getComputedHeight()).toBe(106);\n\n  expect(root_child1_child2.getComputedLeft()).toBe(0);\n  expect(root_child1_child2.getComputedTop()).toBe(213);\n  expect(root_child1_child2.getComputedWidth()).toBe(214);\n  expect(root_child1_child2.getComputedHeight()).toBe(107);\n\n  expect(root_child2.getComputedLeft()).toBe(0);\n  expect(root_child2.getComputedTop()).toBe(0);\n  expect(root_child2.getComputedWidth()).toBe(213);\n  expect(root_child2.getComputedHeight()).toBe(320);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGSizeOverflowTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<09381d1f2a9ade99b83e83ae80d9b1fb>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGSizeOverflowTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('nested_overflowing_child', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n});\ntest('nested_overflowing_child_in_constraint_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setHeight(100);\n  root.setWidth(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(100);\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n});\ntest('parent_wrap_child_size_overflowing_parent', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n  root.setWidth(100);\n  root.setHeight(100);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setHeight(200);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n});\n"
  },
  {
    "path": "javascript/tests/generated/YGStaticPositionTest.test.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @generated SignedSource<<3e2e54bdc4960c437415132dafa7d211>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGStaticPositionTest.html\n */\n\nimport { instrinsicSizeMeasureFunc } from '../tools/utils.ts'\nimport Yoga from 'yoga-layout';\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  Errata,\n  ExperimentalFeature,\n  FlexDirection,\n  Gutter,\n  Justify,\n  MeasureMode,\n  Overflow,\n  PositionType,\n  Unit,\n  Wrap,\n} from 'yoga-layout';\n\ntest('static_position_insets_have_no_effect_left_top', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setPositionType(PositionType.Static);\n  root_child0.setPosition(Edge.Top, 50);\n  root_child0.setPosition(Edge.Left, 50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_insets_have_no_effect_right_bottom', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(100);\n  root_child0.setHeight(100);\n  root_child0.setPositionType(PositionType.Static);\n  root_child0.setPosition(Edge.Bottom, 50);\n  root_child0.setPosition(Edge.Right, 50);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(100);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(100);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_absolute_child_insets_relative_to_positioned_ancestor', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setMargin(Edge.Left, 100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Left, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Left, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.RowReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Left, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_insets_relative_to_positioned_ancestor_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Right, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.Row);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Right, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Right, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0.setPosition(Edge.Right, 50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_insets_relative_to_positioned_ancestor_deep', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setMargin(Edge.Left, 100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0.setMargin(Edge.Left, 100);\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 100);\n  root_child0_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child0.setHeight(100);\n  root_child0_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0_child0.setMargin(Edge.Left, 100);\n  root_child0_child0_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0_child0_child0.insertChild(root_child0_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0_child0_child0_child0.setPosition(Edge.Top, 50);\n  root_child0_child0_child0_child0_child0_child0.setPosition(Edge.Left, 50);\n  root_child0_child0_child0_child0_child0.insertChild(root_child0_child0_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedLeft()).toBe(-350);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_width_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_width_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_width_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_height_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"50%\");\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_relative_child_height_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"50%\");\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_height_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"50%\");\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_left_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Left, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_left_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Left, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_left_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Left, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_right_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Right, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_right_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Right, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_right_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Right, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_top_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Top, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_top_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Top, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_top_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Top, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_bottom_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Bottom, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_bottom_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Bottom, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_bottom_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPosition(Edge.Bottom, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_margin_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setMargin(Edge.All, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_margin_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setMargin(Edge.All, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_margin_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setMargin(Edge.All, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(50);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_padding_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPadding(Edge.All, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(200);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(200);\n});\ntest('static_position_relative_child_padding_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPadding(Edge.All, \"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_static_child_padding_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPadding(Edge.All, \"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_absolute_child_border_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_border_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_border_percentage', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(200);\n  root_child0.setHeight(200);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(50);\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(200);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(200);\n  expect(root_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_containing_block_padding_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_containing_block_padding_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_containing_block_padding_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"50%\");\n  root_child0_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(50);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(50);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_absolute_child_containing_block_content_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(50);\n  root_child0_child0.setWidth(\"50%\");\n  root_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_relative_child_containing_block_content_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(50);\n  root_child0_child0.setWidth(\"50%\");\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_child_containing_block_content_box', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(50);\n  root_child0_child0.setWidth(\"50%\");\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_containing_block_padding_and_border', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.Top, 8);\n  root_child0.setPadding(Edge.Right, 1);\n  root_child0.setPadding(Edge.Bottom, 4);\n  root_child0.setPadding(Edge.Left, 9);\n  root_child0.setBorder(Edge.Top, 5);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 4);\n  root_child0.setBorder(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"61%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(11);\n  expect(root_child0_child0.getComputedTop()).toBe(13);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(239);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(292);\n  expect(root_child0_child0.getComputedTop()).toBe(13);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-60);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(160);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(239);\n});\ntest('static_position_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(500);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"63%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Left, 2);\n  root_child0_child0_child0.setPosition(Edge.Right, 12);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(1);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(279);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-2);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n});\ntest('static_position_no_position_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(500);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"63%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(279);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-15);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n});\ntest('static_position_zero_for_inset_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(500);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"63%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Left, \"0%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-1);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(279);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-265);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n});\ntest('static_position_start_inset_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(500);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"63%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Start, 12);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(11);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(279);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-2);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n});\ntest('static_position_end_inset_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(500);\n  root_child0.setHeight(500);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(200);\n  root_child0_child0.setWidth(200);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(\"63%\");\n  root_child0_child0_child0.setWidth(\"41%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.End, 4);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(270);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(513);\n  expect(root.getComputedHeight()).toBe(506);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(500);\n  expect(root_child0.getComputedHeight()).toBe(500);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(279);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0.getComputedHeight()).toBe(200);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-261);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(306);\n});\ntest('static_position_row_reverse_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setFlexDirection(FlexDirection.RowReverse);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setHeight(\"12%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-128);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(133);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(23);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(133);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(23);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_column_reverse_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setFlexDirection(FlexDirection.ColumnReverse);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-82);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-15);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(-82);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_justify_flex_start_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(111);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_justify_flex_start_position_set_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setPosition(Edge.Right, 30);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(106);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(106);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_no_definite_size_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Left, \"23%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(133);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(133);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_both_insets_set_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setPosition(Edge.Left, \"23%\");\n  root_child0_child0_child0.setPosition(Edge.Right, 13);\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(9);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(69);\n  expect(root.getComputedHeight()).toBe(79);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(56);\n  expect(root_child0.getComputedHeight()).toBe(73);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0.getComputedHeight()).toBe(22);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(-3);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_justify_center_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setJustifyContent(Justify.Center);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(85);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(111);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(85);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_justify_flex_end_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setJustifyContent(Justify.FlexEnd);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(111);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_align_flex_start_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setAlignItems(Align.FlexStart);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(111);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_align_center_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setAlignItems(Align.Center);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(65);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(39);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(75);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(75);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(65);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(39);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(75);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(75);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_align_flex_end_amalgamation', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setMargin(Edge.Top, 5);\n  root_child0.setMargin(Edge.Right, 9);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 4);\n  root_child0.setBorder(Edge.Top, 6);\n  root_child0.setBorder(Edge.Right, 7);\n  root_child0.setBorder(Edge.Bottom, 8);\n  root_child0.setBorder(Edge.Left, 5);\n  root_child0.setPadding(Edge.Top, 9);\n  root_child0.setPadding(Edge.Right, 11);\n  root_child0.setPadding(Edge.Bottom, 13);\n  root_child0.setPadding(Edge.Left, 2);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0_child0.setMargin(Edge.Top, 6);\n  root_child0_child0.setMargin(Edge.Right, 3);\n  root_child0_child0.setMargin(Edge.Bottom, 9);\n  root_child0_child0.setMargin(Edge.Left, 8);\n  root_child0_child0.setBorder(Edge.Top, 10);\n  root_child0_child0.setBorder(Edge.Right, 2);\n  root_child0_child0.setBorder(Edge.Bottom, 1);\n  root_child0_child0.setBorder(Edge.Left, 8);\n  root_child0_child0.setPadding(Edge.Top, 7);\n  root_child0_child0.setPadding(Edge.Right, 9);\n  root_child0_child0.setPadding(Edge.Bottom, 4);\n  root_child0_child0.setPadding(Edge.Left, 1);\n  root_child0_child0.setAlignItems(Align.FlexEnd);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0_child0.setWidth(\"21%\");\n  root_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0_child0.setWidth(100);\n  root_child0_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child0_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child0_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child0_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child0_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child0_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child0_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child0_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child0_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child0_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child0_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child0.insertChild(root_child0_child0_child0_child0, 0);\n\n  const root_child0_child0_child1 = Yoga.Node.create(config);\n  root_child0_child0_child1.setWidth(\"10%\");\n  root_child0_child0_child1.setMargin(Edge.Top, 12);\n  root_child0_child0_child1.setMargin(Edge.Right, 4);\n  root_child0_child0_child1.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1.setMargin(Edge.Left, 9);\n  root_child0_child0_child1.setBorder(Edge.Top, 1);\n  root_child0_child0_child1.setBorder(Edge.Right, 5);\n  root_child0_child0_child1.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1.setBorder(Edge.Left, 2);\n  root_child0_child0_child1.setPadding(Edge.Top, 3);\n  root_child0_child0_child1.setPadding(Edge.Right, 8);\n  root_child0_child0_child1.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child1, 1);\n\n  const root_child0_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child0_child1_child0.setWidth(100);\n  root_child0_child0_child1_child0.setHeight(50);\n  root_child0_child0_child1_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child1_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child1_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child1_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child1_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child1_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child1_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child1_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child1_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child1_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child1_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child1.insertChild(root_child0_child0_child1_child0, 0);\n\n  const root_child0_child0_child2 = Yoga.Node.create(config);\n  root_child0_child0_child2.setWidth(\"10%\");\n  root_child0_child0_child2.setMargin(Edge.Top, 12);\n  root_child0_child0_child2.setMargin(Edge.Right, 4);\n  root_child0_child0_child2.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2.setMargin(Edge.Left, 9);\n  root_child0_child0_child2.setBorder(Edge.Top, 1);\n  root_child0_child0_child2.setBorder(Edge.Right, 5);\n  root_child0_child0_child2.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2.setBorder(Edge.Left, 2);\n  root_child0_child0_child2.setPadding(Edge.Top, 3);\n  root_child0_child0_child2.setPadding(Edge.Right, 8);\n  root_child0_child0_child2.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2.setPadding(Edge.Left, 5);\n  root_child0_child0.insertChild(root_child0_child0_child2, 2);\n\n  const root_child0_child0_child2_child0 = Yoga.Node.create(config);\n  root_child0_child0_child2_child0.setWidth(100);\n  root_child0_child0_child2_child0.setHeight(50);\n  root_child0_child0_child2_child0.setMargin(Edge.Top, 12);\n  root_child0_child0_child2_child0.setMargin(Edge.Right, 4);\n  root_child0_child0_child2_child0.setMargin(Edge.Bottom, 7);\n  root_child0_child0_child2_child0.setMargin(Edge.Left, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Top, 1);\n  root_child0_child0_child2_child0.setBorder(Edge.Right, 5);\n  root_child0_child0_child2_child0.setBorder(Edge.Bottom, 9);\n  root_child0_child0_child2_child0.setBorder(Edge.Left, 2);\n  root_child0_child0_child2_child0.setPadding(Edge.Top, 3);\n  root_child0_child0_child2_child0.setPadding(Edge.Right, 8);\n  root_child0_child0_child2_child0.setPadding(Edge.Bottom, 10);\n  root_child0_child0_child2_child0.setPadding(Edge.Left, 5);\n  root_child0_child0_child2.insertChild(root_child0_child0_child2_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(111);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(131);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(215);\n  expect(root.getComputedHeight()).toBe(301);\n\n  expect(root_child0.getComputedLeft()).toBe(4);\n  expect(root_child0.getComputedTop()).toBe(5);\n  expect(root_child0.getComputedWidth()).toBe(202);\n  expect(root_child0.getComputedHeight()).toBe(295);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(15);\n  expect(root_child0_child0.getComputedTop()).toBe(21);\n  expect(root_child0_child0.getComputedWidth()).toBe(166);\n  expect(root_child0_child0.getComputedHeight()).toBe(244);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child0_child0.getComputedLeft()).toBe(-77);\n  expect(root_child0_child0_child0_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child1.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child1.getComputedTop()).toBe(29);\n  expect(root_child0_child0_child1.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child1.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child1_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child1_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child1_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child0_child2.getComputedLeft()).toBe(18);\n  expect(root_child0_child0_child2.getComputedTop()).toBe(140);\n  expect(root_child0_child0_child2.getComputedWidth()).toBe(20);\n  expect(root_child0_child0_child2.getComputedHeight()).toBe(92);\n\n  expect(root_child0_child0_child2_child0.getComputedLeft()).toBe(-97);\n  expect(root_child0_child0_child2_child0.getComputedTop()).toBe(16);\n  expect(root_child0_child0_child2_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0_child2_child0.getComputedHeight()).toBe(50);\n});\ntest('static_position_static_root', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setHeight(200);\n  root.setWidth(100);\n  root.setPositionType(PositionType.Static);\n  root.setPadding(Edge.Top, 1);\n  root.setPadding(Edge.Right, 11);\n  root.setPadding(Edge.Bottom, 4);\n  root.setPadding(Edge.Left, 6);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setHeight(\"50%\");\n  root_child0.setWidth(\"50%\");\n  root_child0.setPositionType(PositionType.Absolute);\n  root_child0.setBorder(Edge.Top, 3);\n  root_child0.setBorder(Edge.Right, 2);\n  root_child0.setBorder(Edge.Bottom, 1);\n  root_child0.setBorder(Edge.Left, 4);\n  root_child0.setPadding(Edge.Top, 7);\n  root_child0.setPadding(Edge.Right, 5);\n  root_child0.setPadding(Edge.Bottom, 4);\n  root_child0.setPadding(Edge.Left, 3);\n  root_child0.setMargin(Edge.Top, 11);\n  root_child0.setMargin(Edge.Right, 15);\n  root_child0.setMargin(Edge.Bottom, 1);\n  root_child0.setMargin(Edge.Left, 12);\n  root.insertChild(root_child0, 0);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(18);\n  expect(root_child0.getComputedTop()).toBe(12);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(100);\n  expect(root.getComputedHeight()).toBe(200);\n\n  expect(root_child0.getComputedLeft()).toBe(24);\n  expect(root_child0.getComputedTop()).toBe(12);\n  expect(root_child0.getComputedWidth()).toBe(50);\n  expect(root_child0.getComputedHeight()).toBe(100);\n});\ntest('static_position_absolute_child_multiple', () => {\n  const config = Yoga.Config.create();\n\n  const root = Yoga.Node.create(config);\n  root.setPositionType(PositionType.Absolute);\n\n  const root_child0 = Yoga.Node.create(config);\n  root_child0.setWidth(400);\n  root_child0.setHeight(400);\n  root_child0.setPadding(Edge.All, 100);\n  root.insertChild(root_child0, 0);\n\n  const root_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0.setHeight(100);\n  root_child0_child0.setWidth(100);\n  root_child0_child0.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child0, 0);\n\n  const root_child0_child0_child0 = Yoga.Node.create(config);\n  root_child0_child0_child0.setHeight(50);\n  root_child0_child0_child0.setWidth(\"10%\");\n  root_child0_child0_child0.setPositionType(PositionType.Absolute);\n  root_child0_child0.insertChild(root_child0_child0_child0, 0);\n\n  const root_child0_child1 = Yoga.Node.create(config);\n  root_child0_child1.setHeight(100);\n  root_child0_child1.setWidth(100);\n  root_child0_child1.setPositionType(PositionType.Static);\n  root_child0.insertChild(root_child0_child1, 1);\n\n  const root_child0_child1_child0 = Yoga.Node.create(config);\n  root_child0_child1_child0.setHeight(50);\n  root_child0_child1_child0.setWidth(\"50%\");\n  root_child0_child1_child0.setPositionType(PositionType.Absolute);\n  root_child0_child1.insertChild(root_child0_child1_child0, 0);\n\n  const root_child0_child1_child1 = Yoga.Node.create(config);\n  root_child0_child1_child1.setHeight(50);\n  root_child0_child1_child1.setWidth(\"50%\");\n  root_child0_child1_child1.setPositionType(PositionType.Absolute);\n  root_child0_child1.insertChild(root_child0_child1_child1, 1);\n\n  const root_child0_child2 = Yoga.Node.create(config);\n  root_child0_child2.setHeight(50);\n  root_child0_child2.setWidth(25);\n  root_child0_child2.setPositionType(PositionType.Absolute);\n  root_child0.insertChild(root_child0_child2, 2);\n  root.calculateLayout(undefined, undefined, Direction.LTR);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(100);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(100);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1_child1.getComputedLeft()).toBe(0);\n  expect(root_child0_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child1.getComputedWidth()).toBe(200);\n  expect(root_child0_child1_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(100);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n\n  root.calculateLayout(undefined, undefined, Direction.RTL);\n\n  expect(root.getComputedLeft()).toBe(0);\n  expect(root.getComputedTop()).toBe(0);\n  expect(root.getComputedWidth()).toBe(400);\n  expect(root.getComputedHeight()).toBe(400);\n\n  expect(root_child0.getComputedLeft()).toBe(0);\n  expect(root_child0.getComputedTop()).toBe(0);\n  expect(root_child0.getComputedWidth()).toBe(400);\n  expect(root_child0.getComputedHeight()).toBe(400);\n\n  expect(root_child0_child0.getComputedLeft()).toBe(200);\n  expect(root_child0_child0.getComputedTop()).toBe(100);\n  expect(root_child0_child0.getComputedWidth()).toBe(100);\n  expect(root_child0_child0.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child0_child0.getComputedLeft()).toBe(60);\n  expect(root_child0_child0_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child0_child0.getComputedWidth()).toBe(40);\n  expect(root_child0_child0_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1.getComputedLeft()).toBe(200);\n  expect(root_child0_child1.getComputedTop()).toBe(200);\n  expect(root_child0_child1.getComputedWidth()).toBe(100);\n  expect(root_child0_child1.getComputedHeight()).toBe(100);\n\n  expect(root_child0_child1_child0.getComputedLeft()).toBe(-100);\n  expect(root_child0_child1_child0.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child0.getComputedWidth()).toBe(200);\n  expect(root_child0_child1_child0.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child1_child1.getComputedLeft()).toBe(-100);\n  expect(root_child0_child1_child1.getComputedTop()).toBe(0);\n  expect(root_child0_child1_child1.getComputedWidth()).toBe(200);\n  expect(root_child0_child1_child1.getComputedHeight()).toBe(50);\n\n  expect(root_child0_child2.getComputedLeft()).toBe(275);\n  expect(root_child0_child2.getComputedTop()).toBe(100);\n  expect(root_child0_child2.getComputedWidth()).toBe(25);\n  expect(root_child0_child2.getComputedHeight()).toBe(50);\n});\n"
  },
  {
    "path": "javascript/tests/tools/MeasureCounter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport type {MeasureFunction} from 'yoga-layout';\nimport Yoga from 'yoga-layout';\n\nexport type MeasureCounter = {\n  inc: MeasureFunction;\n  get: () => number;\n};\n\nexport function getMeasureCounter(\n  cb?: MeasureFunction | null,\n  staticWidth = 0,\n  staticHeight = 0,\n): MeasureCounter {\n  let counter = 0;\n\n  return {\n    inc: function (width, widthMode, height, heightMode) {\n      counter += 1;\n\n      return cb\n        ? cb(width, widthMode, height, heightMode)\n        : {width: staticWidth, height: staticHeight};\n    },\n\n    get: function () {\n      return counter;\n    },\n  };\n}\n\nexport function getMeasureCounterMax(): MeasureCounter {\n  return getMeasureCounter((width, widthMode, height, heightMode) => {\n    const measuredWidth =\n      widthMode === Yoga.MEASURE_MODE_UNDEFINED ? 10 : width;\n    const measuredHeight =\n      heightMode === Yoga.MEASURE_MODE_UNDEFINED ? 10 : height;\n\n    return {width: measuredWidth, height: measuredHeight};\n  });\n}\n\nexport function getMeasureCounterMin(): MeasureCounter {\n  return getMeasureCounter((width, widthMode, height, heightMode) => {\n    const measuredWidth =\n      widthMode === Yoga.MEASURE_MODE_UNDEFINED ||\n      (widthMode == Yoga.MEASURE_MODE_AT_MOST && width > 10)\n        ? 10\n        : width;\n    const measuredHeight =\n      heightMode === Yoga.MEASURE_MODE_UNDEFINED ||\n      (heightMode == Yoga.MEASURE_MODE_AT_MOST && height > 10)\n        ? 10\n        : height;\n\n    return {width: measuredWidth, height: measuredHeight};\n  });\n}\n"
  },
  {
    "path": "javascript/tests/tools/globals.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\ndeclare global {\n  // eslint-disable-next-line no-var\n  var YGBENCHMARK: (title: string, fn: () => void) => void;\n}\n\nif (globalThis.YGBENCHMARK === undefined) {\n  throw new Error('Expected \"YGBENCHMARK\" global to be set');\n}\n\nconst benchmark = globalThis.YGBENCHMARK;\n\nexport {benchmark as YGBENCHMARK};\n"
  },
  {
    "path": "javascript/tests/tools/utils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {FlexDirection, MeasureMode} from 'yoga-layout';\n\ntype MeasureContext = {\n  text: string;\n  flexDirection: FlexDirection;\n};\n\nexport function instrinsicSizeMeasureFunc(\n  this: MeasureContext,\n  width: number,\n  widthMode: MeasureMode,\n  height: number,\n  heightMode: MeasureMode,\n): {width: number; height: number} {\n  const textLength = this.text.length;\n  const words = this.text.split(' ');\n  const flexDirection = this.flexDirection;\n  const widthPerChar = 10;\n  const heightPerChar = 10;\n\n  let measuredWidth: number;\n  let measuredHeight: number;\n\n  switch (widthMode) {\n    case MeasureMode.Exactly:\n      measuredWidth = width;\n      break;\n    case MeasureMode.AtMost:\n      measuredWidth = Math.min(width, textLength * widthPerChar);\n      break;\n    default:\n      measuredWidth = textLength * widthPerChar;\n  }\n\n  switch (heightMode) {\n    case MeasureMode.Exactly:\n      measuredHeight = height;\n      break;\n    case MeasureMode.AtMost:\n      measuredHeight = Math.min(height, calculateHeight());\n      break;\n    default:\n      measuredHeight = calculateHeight();\n  }\n\n  function longestWordWidth() {\n    return Math.max(...words.map(word => word.length)) * widthPerChar;\n  }\n\n  function calculateHeight() {\n    if (textLength * widthPerChar <= measuredWidth) {\n      return heightPerChar;\n    }\n\n    const maxLineWidth =\n      flexDirection == FlexDirection.Column\n        ? measuredWidth\n        : Math.max(longestWordWidth(), measuredWidth);\n\n    //if fixed width < width of widest word, take width of widest word\n\n    let lines = 1;\n    let currentLineLength = 0;\n    for (const word of words) {\n      const wordWidth = word.length * widthPerChar;\n      if (wordWidth > maxLineWidth) {\n        if (currentLineLength > 0) {\n          lines++;\n        }\n        lines++;\n        currentLineLength = 0;\n      } else if (currentLineLength + wordWidth <= maxLineWidth) {\n        currentLineLength += widthPerChar + wordWidth;\n      } else {\n        lines++;\n        currentLineLength = widthPerChar + wordWidth;\n      }\n    }\n    return (currentLineLength === 0 ? lines - 1 : lines) * heightPerChar;\n  }\n\n  return {width: measuredWidth, height: measuredHeight};\n}\n"
  },
  {
    "path": "javascript/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"strict\": true,\n    \"declaration\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    // TODO: moduleResolution: \"nodenext\" is buggy with this if the absolute\n    // path contains any capital letters\n    \"forceConsistentCasingInFileNames\": false,\n    \"baseUrl\": \".\",\n    \"moduleResolution\": \"nodenext\",\n    \"allowImportingTsExtensions\": true,\n    \"paths\": {\n      \"yoga-layout\": [\"src\"]\n    }\n  },\n  \"include\": [\n    \"src/**/*\",\n    \"tests/**/*\"\n  ]\n}\n"
  },
  {
    "path": "lib/jni/jni.h",
    "content": "/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the LICENSE\n * file in the root directory of this source tree.\n */\n#pragma once\n\n#ifdef __ANDROID__\n#include_next <jni.h>\n#else\n#include \"real/jni.h\"\n#endif\n"
  },
  {
    "path": "lib/jni/real/jni.h",
    "content": "/*\n * Copyright (C) 2006 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * JNI specification, as defined by Sun:\n * http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html\n *\n * Everything here is expected to be VM-neutral.\n */\n\n#ifndef JNI_H_\n#define JNI_H_\n\n#include <stdarg.h>\n#include <stdint.h>\n\n/* Primitive types that match up with Java equivalents. */\ntypedef uint8_t  jboolean; /* unsigned 8 bits */\ntypedef int8_t   jbyte;    /* signed 8 bits */\ntypedef uint16_t jchar;    /* unsigned 16 bits */\ntypedef int16_t  jshort;   /* signed 16 bits */\ntypedef int32_t  jint;     /* signed 32 bits */\ntypedef int64_t  jlong;    /* signed 64 bits */\ntypedef float    jfloat;   /* 32-bit IEEE 754 */\ntypedef double   jdouble;  /* 64-bit IEEE 754 */\n\n/* \"cardinal indices and sizes\" */\ntypedef jint     jsize;\n\n#ifdef __cplusplus\n/*\n * Reference types, in C++\n */\nclass _jobject {};\nclass _jclass : public _jobject {};\nclass _jstring : public _jobject {};\nclass _jarray : public _jobject {};\nclass _jobjectArray : public _jarray {};\nclass _jbooleanArray : public _jarray {};\nclass _jbyteArray : public _jarray {};\nclass _jcharArray : public _jarray {};\nclass _jshortArray : public _jarray {};\nclass _jintArray : public _jarray {};\nclass _jlongArray : public _jarray {};\nclass _jfloatArray : public _jarray {};\nclass _jdoubleArray : public _jarray {};\nclass _jthrowable : public _jobject {};\n\ntypedef _jobject*       jobject;\ntypedef _jclass*        jclass;\ntypedef _jstring*       jstring;\ntypedef _jarray*        jarray;\ntypedef _jobjectArray*  jobjectArray;\ntypedef _jbooleanArray* jbooleanArray;\ntypedef _jbyteArray*    jbyteArray;\ntypedef _jcharArray*    jcharArray;\ntypedef _jshortArray*   jshortArray;\ntypedef _jintArray*     jintArray;\ntypedef _jlongArray*    jlongArray;\ntypedef _jfloatArray*   jfloatArray;\ntypedef _jdoubleArray*  jdoubleArray;\ntypedef _jthrowable*    jthrowable;\ntypedef _jobject*       jweak;\n\n\n#else /* not __cplusplus */\n\n/*\n * Reference types, in C.\n */\ntypedef void*           jobject;\ntypedef jobject         jclass;\ntypedef jobject         jstring;\ntypedef jobject         jarray;\ntypedef jarray          jobjectArray;\ntypedef jarray          jbooleanArray;\ntypedef jarray          jbyteArray;\ntypedef jarray          jcharArray;\ntypedef jarray          jshortArray;\ntypedef jarray          jintArray;\ntypedef jarray          jlongArray;\ntypedef jarray          jfloatArray;\ntypedef jarray          jdoubleArray;\ntypedef jobject         jthrowable;\ntypedef jobject         jweak;\n\n#endif /* not __cplusplus */\n\nstruct _jfieldID;                       /* opaque structure */\ntypedef struct _jfieldID* jfieldID;     /* field IDs */\n\nstruct _jmethodID;                      /* opaque structure */\ntypedef struct _jmethodID* jmethodID;   /* method IDs */\n\nstruct JNIInvokeInterface;\n\ntypedef union jvalue {\n    jboolean    z;\n    jbyte       b;\n    jchar       c;\n    jshort      s;\n    jint        i;\n    jlong       j;\n    jfloat      f;\n    jdouble     d;\n    jobject     l;\n} jvalue;\n\ntypedef enum jobjectRefType {\n    JNIInvalidRefType = 0,\n    JNILocalRefType = 1,\n    JNIGlobalRefType = 2,\n    JNIWeakGlobalRefType = 3\n} jobjectRefType;\n\ntypedef struct {\n    const char* name;\n    const char* signature;\n    void*       fnPtr;\n} JNINativeMethod;\n\nstruct _JNIEnv;\nstruct _JavaVM;\ntypedef const struct JNINativeInterface* C_JNIEnv;\n\n#if defined(__cplusplus)\ntypedef _JNIEnv JNIEnv;\ntypedef _JavaVM JavaVM;\n#else\ntypedef const struct JNINativeInterface* JNIEnv;\ntypedef const struct JNIInvokeInterface* JavaVM;\n#endif\n\n/*\n * Table of interface function pointers.\n */\nstruct JNINativeInterface {\n    void*       reserved0;\n    void*       reserved1;\n    void*       reserved2;\n    void*       reserved3;\n\n    jint        (*GetVersion)(JNIEnv *);\n\n    jclass      (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*,\n                        jsize);\n    jclass      (*FindClass)(JNIEnv*, const char*);\n\n    jmethodID   (*FromReflectedMethod)(JNIEnv*, jobject);\n    jfieldID    (*FromReflectedField)(JNIEnv*, jobject);\n    /* spec doesn't show jboolean parameter */\n    jobject     (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);\n\n    jclass      (*GetSuperclass)(JNIEnv*, jclass);\n    jboolean    (*IsAssignableFrom)(JNIEnv*, jclass, jclass);\n\n    /* spec doesn't show jboolean parameter */\n    jobject     (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);\n\n    jint        (*Throw)(JNIEnv*, jthrowable);\n    jint        (*ThrowNew)(JNIEnv *, jclass, const char *);\n    jthrowable  (*ExceptionOccurred)(JNIEnv*);\n    void        (*ExceptionDescribe)(JNIEnv*);\n    void        (*ExceptionClear)(JNIEnv*);\n    void        (*FatalError)(JNIEnv*, const char*);\n\n    jint        (*PushLocalFrame)(JNIEnv*, jint);\n    jobject     (*PopLocalFrame)(JNIEnv*, jobject);\n\n    jobject     (*NewGlobalRef)(JNIEnv*, jobject);\n    void        (*DeleteGlobalRef)(JNIEnv*, jobject);\n    void        (*DeleteLocalRef)(JNIEnv*, jobject);\n    jboolean    (*IsSameObject)(JNIEnv*, jobject, jobject);\n\n    jobject     (*NewLocalRef)(JNIEnv*, jobject);\n    jint        (*EnsureLocalCapacity)(JNIEnv*, jint);\n\n    jobject     (*AllocObject)(JNIEnv*, jclass);\n    jobject     (*NewObject)(JNIEnv*, jclass, jmethodID, ...);\n    jobject     (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);\n    jobject     (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);\n\n    jclass      (*GetObjectClass)(JNIEnv*, jobject);\n    jboolean    (*IsInstanceOf)(JNIEnv*, jobject, jclass);\n    jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);\n\n    jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jboolean    (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jboolean    (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jboolean    (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jbyte       (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jbyte       (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jbyte       (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jchar       (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jchar       (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jchar       (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jshort      (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jshort      (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jshort      (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jint        (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jint        (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jlong       (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jlong       (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jlong       (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jfloat      (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jfloat      (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jfloat      (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    jdouble     (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);\n    jdouble     (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    jdouble     (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);\n    void        (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);\n    void        (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);\n\n    jobject     (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jobject     (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jobject     (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jboolean    (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jboolean    (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,\n                         jmethodID, va_list);\n    jboolean    (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,\n                         jmethodID, jvalue*);\n    jbyte       (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jbyte       (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jbyte       (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jchar       (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jchar       (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jchar       (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jshort      (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jshort      (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jshort      (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jint        (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jint        (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jint        (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jlong       (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jlong       (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jlong       (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jfloat      (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jfloat      (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jfloat      (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    jdouble     (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    jdouble     (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    jdouble     (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n    void        (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,\n                        jmethodID, ...);\n    void        (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,\n                        jmethodID, va_list);\n    void        (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,\n                        jmethodID, jvalue*);\n\n    jfieldID    (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);\n\n    jobject     (*GetObjectField)(JNIEnv*, jobject, jfieldID);\n    jboolean    (*GetBooleanField)(JNIEnv*, jobject, jfieldID);\n    jbyte       (*GetByteField)(JNIEnv*, jobject, jfieldID);\n    jchar       (*GetCharField)(JNIEnv*, jobject, jfieldID);\n    jshort      (*GetShortField)(JNIEnv*, jobject, jfieldID);\n    jint        (*GetIntField)(JNIEnv*, jobject, jfieldID);\n    jlong       (*GetLongField)(JNIEnv*, jobject, jfieldID);\n    jfloat      (*GetFloatField)(JNIEnv*, jobject, jfieldID);\n    jdouble     (*GetDoubleField)(JNIEnv*, jobject, jfieldID);\n\n    void        (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);\n    void        (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);\n    void        (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);\n    void        (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);\n    void        (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);\n    void        (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);\n    void        (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);\n    void        (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);\n    void        (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);\n\n    jmethodID   (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);\n\n    jobject     (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jobject     (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jobject     (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jboolean    (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jboolean    (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,\n                        va_list);\n    jboolean    (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,\n                        jvalue*);\n    jbyte       (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jbyte       (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jbyte       (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jchar       (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jchar       (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jchar       (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jshort      (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jshort      (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jshort      (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jint        (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jint        (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jint        (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jlong       (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jlong       (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jlong       (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jfloat      (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jfloat      (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jfloat      (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    jdouble     (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);\n    jdouble     (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    jdouble     (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n    void        (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);\n    void        (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);\n    void        (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);\n\n    jfieldID    (*GetStaticFieldID)(JNIEnv*, jclass, const char*,\n                        const char*);\n\n    jobject     (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);\n    jboolean    (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);\n    jbyte       (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);\n    jchar       (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);\n    jshort      (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);\n    jint        (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);\n    jlong       (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);\n    jfloat      (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);\n    jdouble     (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);\n\n    void        (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);\n    void        (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);\n    void        (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);\n    void        (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);\n    void        (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);\n    void        (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);\n    void        (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);\n    void        (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);\n    void        (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);\n\n    jstring     (*NewString)(JNIEnv*, const jchar*, jsize);\n    jsize       (*GetStringLength)(JNIEnv*, jstring);\n    const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);\n    void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);\n    jstring     (*NewStringUTF)(JNIEnv*, const char*);\n    jsize       (*GetStringUTFLength)(JNIEnv*, jstring);\n    /* JNI spec says this returns const jbyte*, but that's inconsistent */\n    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);\n    void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);\n    jsize       (*GetArrayLength)(JNIEnv*, jarray);\n    jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);\n    jobject     (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);\n    void        (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);\n\n    jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);\n    jbyteArray    (*NewByteArray)(JNIEnv*, jsize);\n    jcharArray    (*NewCharArray)(JNIEnv*, jsize);\n    jshortArray   (*NewShortArray)(JNIEnv*, jsize);\n    jintArray     (*NewIntArray)(JNIEnv*, jsize);\n    jlongArray    (*NewLongArray)(JNIEnv*, jsize);\n    jfloatArray   (*NewFloatArray)(JNIEnv*, jsize);\n    jdoubleArray  (*NewDoubleArray)(JNIEnv*, jsize);\n\n    jboolean*   (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);\n    jbyte*      (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);\n    jchar*      (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);\n    jshort*     (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);\n    jint*       (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);\n    jlong*      (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);\n    jfloat*     (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);\n    jdouble*    (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);\n\n    void        (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,\n                        jboolean*, jint);\n    void        (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,\n                        jbyte*, jint);\n    void        (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,\n                        jchar*, jint);\n    void        (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,\n                        jshort*, jint);\n    void        (*ReleaseIntArrayElements)(JNIEnv*, jintArray,\n                        jint*, jint);\n    void        (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,\n                        jlong*, jint);\n    void        (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,\n                        jfloat*, jint);\n    void        (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,\n                        jdouble*, jint);\n\n    void        (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray,\n                        jsize, jsize, jboolean*);\n    void        (*GetByteArrayRegion)(JNIEnv*, jbyteArray,\n                        jsize, jsize, jbyte*);\n    void        (*GetCharArrayRegion)(JNIEnv*, jcharArray,\n                        jsize, jsize, jchar*);\n    void        (*GetShortArrayRegion)(JNIEnv*, jshortArray,\n                        jsize, jsize, jshort*);\n    void        (*GetIntArrayRegion)(JNIEnv*, jintArray,\n                        jsize, jsize, jint*);\n    void        (*GetLongArrayRegion)(JNIEnv*, jlongArray,\n                        jsize, jsize, jlong*);\n    void        (*GetFloatArrayRegion)(JNIEnv*, jfloatArray,\n                        jsize, jsize, jfloat*);\n    void        (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray,\n                        jsize, jsize, jdouble*);\n\n    /* spec shows these without const; some jni.h do, some don't */\n    void        (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,\n                        jsize, jsize, const jboolean*);\n    void        (*SetByteArrayRegion)(JNIEnv*, jbyteArray,\n                        jsize, jsize, const jbyte*);\n    void        (*SetCharArrayRegion)(JNIEnv*, jcharArray,\n                        jsize, jsize, const jchar*);\n    void        (*SetShortArrayRegion)(JNIEnv*, jshortArray,\n                        jsize, jsize, const jshort*);\n    void        (*SetIntArrayRegion)(JNIEnv*, jintArray,\n                        jsize, jsize, const jint*);\n    void        (*SetLongArrayRegion)(JNIEnv*, jlongArray,\n                        jsize, jsize, const jlong*);\n    void        (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,\n                        jsize, jsize, const jfloat*);\n    void        (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,\n                        jsize, jsize, const jdouble*);\n\n    jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,\n                        jint);\n    jint        (*UnregisterNatives)(JNIEnv*, jclass);\n    jint        (*MonitorEnter)(JNIEnv*, jobject);\n    jint        (*MonitorExit)(JNIEnv*, jobject);\n    jint        (*GetJavaVM)(JNIEnv*, JavaVM**);\n\n    void        (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);\n    void        (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);\n\n    void*       (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);\n    void        (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);\n\n    const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);\n    void        (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);\n\n    jweak       (*NewWeakGlobalRef)(JNIEnv*, jobject);\n    void        (*DeleteWeakGlobalRef)(JNIEnv*, jweak);\n\n    jboolean    (*ExceptionCheck)(JNIEnv*);\n\n    jobject     (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);\n    void*       (*GetDirectBufferAddress)(JNIEnv*, jobject);\n    jlong       (*GetDirectBufferCapacity)(JNIEnv*, jobject);\n\n    /* added in JNI 1.6 */\n    jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);\n};\n\n/*\n * C++ object wrapper.\n *\n * This is usually overlaid on a C struct whose first element is a\n * JNINativeInterface*.  We rely somewhat on compiler behavior.\n */\nstruct _JNIEnv {\n    /* do not rename this; it does not seem to be entirely opaque */\n    const struct JNINativeInterface* functions;\n\n#if defined(__cplusplus)\n\n    jint GetVersion()\n    { return functions->GetVersion(this); }\n\n    jclass DefineClass(const char *name, jobject loader, const jbyte* buf,\n        jsize bufLen)\n    { return functions->DefineClass(this, name, loader, buf, bufLen); }\n\n    jclass FindClass(const char* name)\n    { return functions->FindClass(this, name); }\n\n    jmethodID FromReflectedMethod(jobject method)\n    { return functions->FromReflectedMethod(this, method); }\n\n    jfieldID FromReflectedField(jobject field)\n    { return functions->FromReflectedField(this, field); }\n\n    jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic)\n    { return functions->ToReflectedMethod(this, cls, methodID, isStatic); }\n\n    jclass GetSuperclass(jclass clazz)\n    { return functions->GetSuperclass(this, clazz); }\n\n    jboolean IsAssignableFrom(jclass clazz1, jclass clazz2)\n    { return functions->IsAssignableFrom(this, clazz1, clazz2); }\n\n    jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)\n    { return functions->ToReflectedField(this, cls, fieldID, isStatic); }\n\n    jint Throw(jthrowable obj)\n    { return functions->Throw(this, obj); }\n\n    jint ThrowNew(jclass clazz, const char* message)\n    { return functions->ThrowNew(this, clazz, message); }\n\n    jthrowable ExceptionOccurred()\n    { return functions->ExceptionOccurred(this); }\n\n    void ExceptionDescribe()\n    { functions->ExceptionDescribe(this); }\n\n    void ExceptionClear()\n    { functions->ExceptionClear(this); }\n\n    void FatalError(const char* msg)\n    { functions->FatalError(this, msg); }\n\n    jint PushLocalFrame(jint capacity)\n    { return functions->PushLocalFrame(this, capacity); }\n\n    jobject PopLocalFrame(jobject result)\n    { return functions->PopLocalFrame(this, result); }\n\n    jobject NewGlobalRef(jobject obj)\n    { return functions->NewGlobalRef(this, obj); }\n\n    void DeleteGlobalRef(jobject globalRef)\n    { functions->DeleteGlobalRef(this, globalRef); }\n\n    void DeleteLocalRef(jobject localRef)\n    { functions->DeleteLocalRef(this, localRef); }\n\n    jboolean IsSameObject(jobject ref1, jobject ref2)\n    { return functions->IsSameObject(this, ref1, ref2); }\n\n    jobject NewLocalRef(jobject ref)\n    { return functions->NewLocalRef(this, ref); }\n\n    jint EnsureLocalCapacity(jint capacity)\n    { return functions->EnsureLocalCapacity(this, capacity); }\n\n    jobject AllocObject(jclass clazz)\n    { return functions->AllocObject(this, clazz); }\n\n    jobject NewObject(jclass clazz, jmethodID methodID, ...)\n    {\n        va_list args;\n        va_start(args, methodID);\n        jobject result = functions->NewObjectV(this, clazz, methodID, args);\n        va_end(args);\n        return result;\n    }\n\n    jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args)\n    { return functions->NewObjectV(this, clazz, methodID, args); }\n\n    jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args)\n    { return functions->NewObjectA(this, clazz, methodID, args); }\n\n    jclass GetObjectClass(jobject obj)\n    { return functions->GetObjectClass(this, obj); }\n\n    jboolean IsInstanceOf(jobject obj, jclass clazz)\n    { return functions->IsInstanceOf(this, obj, clazz); }\n\n    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)\n    { return functions->GetMethodID(this, clazz, name, sig); }\n\n#define CALL_TYPE_METHOD(_jtype, _jname)                                    \\\n    _jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...)       \\\n    {                                                                       \\\n        _jtype result;                                                      \\\n        va_list args;                                                       \\\n        va_start(args, methodID);                                           \\\n        result = functions->Call##_jname##MethodV(this, obj, methodID,      \\\n                    args);                                                  \\\n        va_end(args);                                                       \\\n        return result;                                                      \\\n    }\n#define CALL_TYPE_METHODV(_jtype, _jname)                                   \\\n    _jtype Call##_jname##MethodV(jobject obj, jmethodID methodID,           \\\n        va_list args)                                                       \\\n    { return functions->Call##_jname##MethodV(this, obj, methodID, args); }\n#define CALL_TYPE_METHODA(_jtype, _jname)                                   \\\n    _jtype Call##_jname##MethodA(jobject obj, jmethodID methodID,           \\\n        jvalue* args)                                                       \\\n    { return functions->Call##_jname##MethodA(this, obj, methodID, args); }\n\n#define CALL_TYPE(_jtype, _jname)                                           \\\n    CALL_TYPE_METHOD(_jtype, _jname)                                        \\\n    CALL_TYPE_METHODV(_jtype, _jname)                                       \\\n    CALL_TYPE_METHODA(_jtype, _jname)\n\n    CALL_TYPE(jobject, Object)\n    CALL_TYPE(jboolean, Boolean)\n    CALL_TYPE(jbyte, Byte)\n    CALL_TYPE(jchar, Char)\n    CALL_TYPE(jshort, Short)\n    CALL_TYPE(jint, Int)\n    CALL_TYPE(jlong, Long)\n    CALL_TYPE(jfloat, Float)\n    CALL_TYPE(jdouble, Double)\n\n    void CallVoidMethod(jobject obj, jmethodID methodID, ...)\n    {\n        va_list args;\n        va_start(args, methodID);\n        functions->CallVoidMethodV(this, obj, methodID, args);\n        va_end(args);\n    }\n    void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args)\n    { functions->CallVoidMethodV(this, obj, methodID, args); }\n    void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args)\n    { functions->CallVoidMethodA(this, obj, methodID, args); }\n\n#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                            \\\n    _jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz,        \\\n        jmethodID methodID, ...)                                            \\\n    {                                                                       \\\n        _jtype result;                                                      \\\n        va_list args;                                                       \\\n        va_start(args, methodID);                                           \\\n        result = functions->CallNonvirtual##_jname##MethodV(this, obj,      \\\n                    clazz, methodID, args);                                 \\\n        va_end(args);                                                       \\\n        return result;                                                      \\\n    }\n#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                           \\\n    _jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz,       \\\n        jmethodID methodID, va_list args)                                   \\\n    { return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz,   \\\n        methodID, args); }\n#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)                           \\\n    _jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz,       \\\n        jmethodID methodID, jvalue* args)                                   \\\n    { return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz,   \\\n        methodID, args); }\n\n#define CALL_NONVIRT_TYPE(_jtype, _jname)                                   \\\n    CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                                \\\n    CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                               \\\n    CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)\n\n    CALL_NONVIRT_TYPE(jobject, Object)\n    CALL_NONVIRT_TYPE(jboolean, Boolean)\n    CALL_NONVIRT_TYPE(jbyte, Byte)\n    CALL_NONVIRT_TYPE(jchar, Char)\n    CALL_NONVIRT_TYPE(jshort, Short)\n    CALL_NONVIRT_TYPE(jint, Int)\n    CALL_NONVIRT_TYPE(jlong, Long)\n    CALL_NONVIRT_TYPE(jfloat, Float)\n    CALL_NONVIRT_TYPE(jdouble, Double)\n\n    void CallNonvirtualVoidMethod(jobject obj, jclass clazz,\n        jmethodID methodID, ...)\n    {\n        va_list args;\n        va_start(args, methodID);\n        functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args);\n        va_end(args);\n    }\n    void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,\n        jmethodID methodID, va_list args)\n    { functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); }\n    void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,\n        jmethodID methodID, jvalue* args)\n    { functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); }\n\n    jfieldID GetFieldID(jclass clazz, const char* name, const char* sig)\n    { return functions->GetFieldID(this, clazz, name, sig); }\n\n    jobject GetObjectField(jobject obj, jfieldID fieldID)\n    { return functions->GetObjectField(this, obj, fieldID); }\n    jboolean GetBooleanField(jobject obj, jfieldID fieldID)\n    { return functions->GetBooleanField(this, obj, fieldID); }\n    jbyte GetByteField(jobject obj, jfieldID fieldID)\n    { return functions->GetByteField(this, obj, fieldID); }\n    jchar GetCharField(jobject obj, jfieldID fieldID)\n    { return functions->GetCharField(this, obj, fieldID); }\n    jshort GetShortField(jobject obj, jfieldID fieldID)\n    { return functions->GetShortField(this, obj, fieldID); }\n    jint GetIntField(jobject obj, jfieldID fieldID)\n    { return functions->GetIntField(this, obj, fieldID); }\n    jlong GetLongField(jobject obj, jfieldID fieldID)\n    { return functions->GetLongField(this, obj, fieldID); }\n    jfloat GetFloatField(jobject obj, jfieldID fieldID)\n    { return functions->GetFloatField(this, obj, fieldID); }\n    jdouble GetDoubleField(jobject obj, jfieldID fieldID)\n    { return functions->GetDoubleField(this, obj, fieldID); }\n\n    void SetObjectField(jobject obj, jfieldID fieldID, jobject value)\n    { functions->SetObjectField(this, obj, fieldID, value); }\n    void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value)\n    { functions->SetBooleanField(this, obj, fieldID, value); }\n    void SetByteField(jobject obj, jfieldID fieldID, jbyte value)\n    { functions->SetByteField(this, obj, fieldID, value); }\n    void SetCharField(jobject obj, jfieldID fieldID, jchar value)\n    { functions->SetCharField(this, obj, fieldID, value); }\n    void SetShortField(jobject obj, jfieldID fieldID, jshort value)\n    { functions->SetShortField(this, obj, fieldID, value); }\n    void SetIntField(jobject obj, jfieldID fieldID, jint value)\n    { functions->SetIntField(this, obj, fieldID, value); }\n    void SetLongField(jobject obj, jfieldID fieldID, jlong value)\n    { functions->SetLongField(this, obj, fieldID, value); }\n    void SetFloatField(jobject obj, jfieldID fieldID, jfloat value)\n    { functions->SetFloatField(this, obj, fieldID, value); }\n    void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value)\n    { functions->SetDoubleField(this, obj, fieldID, value); }\n\n    jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig)\n    { return functions->GetStaticMethodID(this, clazz, name, sig); }\n\n#define CALL_STATIC_TYPE_METHOD(_jtype, _jname)                             \\\n    _jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID,     \\\n        ...)                                                                \\\n    {                                                                       \\\n        _jtype result;                                                      \\\n        va_list args;                                                       \\\n        va_start(args, methodID);                                           \\\n        result = functions->CallStatic##_jname##MethodV(this, clazz,        \\\n                    methodID, args);                                        \\\n        va_end(args);                                                       \\\n        return result;                                                      \\\n    }\n#define CALL_STATIC_TYPE_METHODV(_jtype, _jname)                            \\\n    _jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID,    \\\n        va_list args)                                                       \\\n    { return functions->CallStatic##_jname##MethodV(this, clazz, methodID,  \\\n        args); }\n#define CALL_STATIC_TYPE_METHODA(_jtype, _jname)                            \\\n    _jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID,    \\\n        jvalue* args)                                                       \\\n    { return functions->CallStatic##_jname##MethodA(this, clazz, methodID,  \\\n        args); }\n\n#define CALL_STATIC_TYPE(_jtype, _jname)                                    \\\n    CALL_STATIC_TYPE_METHOD(_jtype, _jname)                                 \\\n    CALL_STATIC_TYPE_METHODV(_jtype, _jname)                                \\\n    CALL_STATIC_TYPE_METHODA(_jtype, _jname)\n\n    CALL_STATIC_TYPE(jobject, Object)\n    CALL_STATIC_TYPE(jboolean, Boolean)\n    CALL_STATIC_TYPE(jbyte, Byte)\n    CALL_STATIC_TYPE(jchar, Char)\n    CALL_STATIC_TYPE(jshort, Short)\n    CALL_STATIC_TYPE(jint, Int)\n    CALL_STATIC_TYPE(jlong, Long)\n    CALL_STATIC_TYPE(jfloat, Float)\n    CALL_STATIC_TYPE(jdouble, Double)\n\n    void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)\n    {\n        va_list args;\n        va_start(args, methodID);\n        functions->CallStaticVoidMethodV(this, clazz, methodID, args);\n        va_end(args);\n    }\n    void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args)\n    { functions->CallStaticVoidMethodV(this, clazz, methodID, args); }\n    void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args)\n    { functions->CallStaticVoidMethodA(this, clazz, methodID, args); }\n\n    jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig)\n    { return functions->GetStaticFieldID(this, clazz, name, sig); }\n\n    jobject GetStaticObjectField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticObjectField(this, clazz, fieldID); }\n    jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticBooleanField(this, clazz, fieldID); }\n    jbyte GetStaticByteField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticByteField(this, clazz, fieldID); }\n    jchar GetStaticCharField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticCharField(this, clazz, fieldID); }\n    jshort GetStaticShortField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticShortField(this, clazz, fieldID); }\n    jint GetStaticIntField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticIntField(this, clazz, fieldID); }\n    jlong GetStaticLongField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticLongField(this, clazz, fieldID); }\n    jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticFloatField(this, clazz, fieldID); }\n    jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID)\n    { return functions->GetStaticDoubleField(this, clazz, fieldID); }\n\n    void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value)\n    { functions->SetStaticObjectField(this, clazz, fieldID, value); }\n    void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value)\n    { functions->SetStaticBooleanField(this, clazz, fieldID, value); }\n    void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value)\n    { functions->SetStaticByteField(this, clazz, fieldID, value); }\n    void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value)\n    { functions->SetStaticCharField(this, clazz, fieldID, value); }\n    void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value)\n    { functions->SetStaticShortField(this, clazz, fieldID, value); }\n    void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value)\n    { functions->SetStaticIntField(this, clazz, fieldID, value); }\n    void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value)\n    { functions->SetStaticLongField(this, clazz, fieldID, value); }\n    void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value)\n    { functions->SetStaticFloatField(this, clazz, fieldID, value); }\n    void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value)\n    { functions->SetStaticDoubleField(this, clazz, fieldID, value); }\n\n    jstring NewString(const jchar* unicodeChars, jsize len)\n    { return functions->NewString(this, unicodeChars, len); }\n\n    jsize GetStringLength(jstring string)\n    { return functions->GetStringLength(this, string); }\n\n    const jchar* GetStringChars(jstring string, jboolean* isCopy)\n    { return functions->GetStringChars(this, string, isCopy); }\n\n    void ReleaseStringChars(jstring string, const jchar* chars)\n    { functions->ReleaseStringChars(this, string, chars); }\n\n    jstring NewStringUTF(const char* bytes)\n    { return functions->NewStringUTF(this, bytes); }\n\n    jsize GetStringUTFLength(jstring string)\n    { return functions->GetStringUTFLength(this, string); }\n\n    const char* GetStringUTFChars(jstring string, jboolean* isCopy)\n    { return functions->GetStringUTFChars(this, string, isCopy); }\n\n    void ReleaseStringUTFChars(jstring string, const char* utf)\n    { functions->ReleaseStringUTFChars(this, string, utf); }\n\n    jsize GetArrayLength(jarray array)\n    { return functions->GetArrayLength(this, array); }\n\n    jobjectArray NewObjectArray(jsize length, jclass elementClass,\n        jobject initialElement)\n    { return functions->NewObjectArray(this, length, elementClass,\n        initialElement); }\n\n    jobject GetObjectArrayElement(jobjectArray array, jsize index)\n    { return functions->GetObjectArrayElement(this, array, index); }\n\n    void SetObjectArrayElement(jobjectArray array, jsize index, jobject value)\n    { functions->SetObjectArrayElement(this, array, index, value); }\n\n    jbooleanArray NewBooleanArray(jsize length)\n    { return functions->NewBooleanArray(this, length); }\n    jbyteArray NewByteArray(jsize length)\n    { return functions->NewByteArray(this, length); }\n    jcharArray NewCharArray(jsize length)\n    { return functions->NewCharArray(this, length); }\n    jshortArray NewShortArray(jsize length)\n    { return functions->NewShortArray(this, length); }\n    jintArray NewIntArray(jsize length)\n    { return functions->NewIntArray(this, length); }\n    jlongArray NewLongArray(jsize length)\n    { return functions->NewLongArray(this, length); }\n    jfloatArray NewFloatArray(jsize length)\n    { return functions->NewFloatArray(this, length); }\n    jdoubleArray NewDoubleArray(jsize length)\n    { return functions->NewDoubleArray(this, length); }\n\n    jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy)\n    { return functions->GetBooleanArrayElements(this, array, isCopy); }\n    jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy)\n    { return functions->GetByteArrayElements(this, array, isCopy); }\n    jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy)\n    { return functions->GetCharArrayElements(this, array, isCopy); }\n    jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy)\n    { return functions->GetShortArrayElements(this, array, isCopy); }\n    jint* GetIntArrayElements(jintArray array, jboolean* isCopy)\n    { return functions->GetIntArrayElements(this, array, isCopy); }\n    jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy)\n    { return functions->GetLongArrayElements(this, array, isCopy); }\n    jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy)\n    { return functions->GetFloatArrayElements(this, array, isCopy); }\n    jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy)\n    { return functions->GetDoubleArrayElements(this, array, isCopy); }\n\n    void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems,\n        jint mode)\n    { functions->ReleaseBooleanArrayElements(this, array, elems, mode); }\n    void ReleaseByteArrayElements(jbyteArray array, jbyte* elems,\n        jint mode)\n    { functions->ReleaseByteArrayElements(this, array, elems, mode); }\n    void ReleaseCharArrayElements(jcharArray array, jchar* elems,\n        jint mode)\n    { functions->ReleaseCharArrayElements(this, array, elems, mode); }\n    void ReleaseShortArrayElements(jshortArray array, jshort* elems,\n        jint mode)\n    { functions->ReleaseShortArrayElements(this, array, elems, mode); }\n    void ReleaseIntArrayElements(jintArray array, jint* elems,\n        jint mode)\n    { functions->ReleaseIntArrayElements(this, array, elems, mode); }\n    void ReleaseLongArrayElements(jlongArray array, jlong* elems,\n        jint mode)\n    { functions->ReleaseLongArrayElements(this, array, elems, mode); }\n    void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems,\n        jint mode)\n    { functions->ReleaseFloatArrayElements(this, array, elems, mode); }\n    void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems,\n        jint mode)\n    { functions->ReleaseDoubleArrayElements(this, array, elems, mode); }\n\n    void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,\n        jboolean* buf)\n    { functions->GetBooleanArrayRegion(this, array, start, len, buf); }\n    void GetByteArrayRegion(jbyteArray array, jsize start, jsize len,\n        jbyte* buf)\n    { functions->GetByteArrayRegion(this, array, start, len, buf); }\n    void GetCharArrayRegion(jcharArray array, jsize start, jsize len,\n        jchar* buf)\n    { functions->GetCharArrayRegion(this, array, start, len, buf); }\n    void GetShortArrayRegion(jshortArray array, jsize start, jsize len,\n        jshort* buf)\n    { functions->GetShortArrayRegion(this, array, start, len, buf); }\n    void GetIntArrayRegion(jintArray array, jsize start, jsize len,\n        jint* buf)\n    { functions->GetIntArrayRegion(this, array, start, len, buf); }\n    void GetLongArrayRegion(jlongArray array, jsize start, jsize len,\n        jlong* buf)\n    { functions->GetLongArrayRegion(this, array, start, len, buf); }\n    void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len,\n        jfloat* buf)\n    { functions->GetFloatArrayRegion(this, array, start, len, buf); }\n    void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,\n        jdouble* buf)\n    { functions->GetDoubleArrayRegion(this, array, start, len, buf); }\n\n    void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,\n        const jboolean* buf)\n    { functions->SetBooleanArrayRegion(this, array, start, len, buf); }\n    void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,\n        const jbyte* buf)\n    { functions->SetByteArrayRegion(this, array, start, len, buf); }\n    void SetCharArrayRegion(jcharArray array, jsize start, jsize len,\n        const jchar* buf)\n    { functions->SetCharArrayRegion(this, array, start, len, buf); }\n    void SetShortArrayRegion(jshortArray array, jsize start, jsize len,\n        const jshort* buf)\n    { functions->SetShortArrayRegion(this, array, start, len, buf); }\n    void SetIntArrayRegion(jintArray array, jsize start, jsize len,\n        const jint* buf)\n    { functions->SetIntArrayRegion(this, array, start, len, buf); }\n    void SetLongArrayRegion(jlongArray array, jsize start, jsize len,\n        const jlong* buf)\n    { functions->SetLongArrayRegion(this, array, start, len, buf); }\n    void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,\n        const jfloat* buf)\n    { functions->SetFloatArrayRegion(this, array, start, len, buf); }\n    void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,\n        const jdouble* buf)\n    { functions->SetDoubleArrayRegion(this, array, start, len, buf); }\n\n    jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,\n        jint nMethods)\n    { return functions->RegisterNatives(this, clazz, methods, nMethods); }\n\n    jint UnregisterNatives(jclass clazz)\n    { return functions->UnregisterNatives(this, clazz); }\n\n    jint MonitorEnter(jobject obj)\n    { return functions->MonitorEnter(this, obj); }\n\n    jint MonitorExit(jobject obj)\n    { return functions->MonitorExit(this, obj); }\n\n    jint GetJavaVM(JavaVM** vm)\n    { return functions->GetJavaVM(this, vm); }\n\n    void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)\n    { functions->GetStringRegion(this, str, start, len, buf); }\n\n    void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)\n    { return functions->GetStringUTFRegion(this, str, start, len, buf); }\n\n    void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy)\n    { return functions->GetPrimitiveArrayCritical(this, array, isCopy); }\n\n    void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode)\n    { functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); }\n\n    const jchar* GetStringCritical(jstring string, jboolean* isCopy)\n    { return functions->GetStringCritical(this, string, isCopy); }\n\n    void ReleaseStringCritical(jstring string, const jchar* carray)\n    { functions->ReleaseStringCritical(this, string, carray); }\n\n    jweak NewWeakGlobalRef(jobject obj)\n    { return functions->NewWeakGlobalRef(this, obj); }\n\n    void DeleteWeakGlobalRef(jweak obj)\n    { functions->DeleteWeakGlobalRef(this, obj); }\n\n    jboolean ExceptionCheck()\n    { return functions->ExceptionCheck(this); }\n\n    jobject NewDirectByteBuffer(void* address, jlong capacity)\n    { return functions->NewDirectByteBuffer(this, address, capacity); }\n\n    void* GetDirectBufferAddress(jobject buf)\n    { return functions->GetDirectBufferAddress(this, buf); }\n\n    jlong GetDirectBufferCapacity(jobject buf)\n    { return functions->GetDirectBufferCapacity(this, buf); }\n\n    /* added in JNI 1.6 */\n    jobjectRefType GetObjectRefType(jobject obj)\n    { return functions->GetObjectRefType(this, obj); }\n#endif /*__cplusplus*/\n};\n\n\n/*\n * JNI invocation interface.\n */\nstruct JNIInvokeInterface {\n    void*       reserved0;\n    void*       reserved1;\n    void*       reserved2;\n\n    jint        (*DestroyJavaVM)(JavaVM*);\n    jint        (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*);\n    jint        (*DetachCurrentThread)(JavaVM*);\n    jint        (*GetEnv)(JavaVM*, void**, jint);\n    jint        (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*);\n};\n\n/*\n * C++ version.\n */\nstruct _JavaVM {\n    const struct JNIInvokeInterface* functions;\n\n#if defined(__cplusplus)\n    jint DestroyJavaVM()\n    { return functions->DestroyJavaVM(this); }\n    jint AttachCurrentThread(JNIEnv** p_env, void* thr_args)\n    { return functions->AttachCurrentThread(this, p_env, thr_args); }\n    jint DetachCurrentThread()\n    { return functions->DetachCurrentThread(this); }\n    jint GetEnv(void** env, jint version)\n    { return functions->GetEnv(this, env, version); }\n    jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args)\n    { return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); }\n#endif /*__cplusplus*/\n};\n\nstruct JavaVMAttachArgs {\n    jint        version;    /* must be >= JNI_VERSION_1_2 */\n    const char* name;       /* NULL or name of thread as modified UTF-8 str */\n    jobject     group;      /* global ref of a ThreadGroup object, or NULL */\n};\ntypedef struct JavaVMAttachArgs JavaVMAttachArgs;\n\n/*\n * JNI 1.2+ initialization.  (As of 1.6, the pre-1.2 structures are no\n * longer supported.)\n */\ntypedef struct JavaVMOption {\n    const char* optionString;\n    void*       extraInfo;\n} JavaVMOption;\n\ntypedef struct JavaVMInitArgs {\n    jint        version;    /* use JNI_VERSION_1_2 or later */\n\n    jint        nOptions;\n    JavaVMOption* options;\n    jboolean    ignoreUnrecognized;\n} JavaVMInitArgs;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/*\n * VM initialization functions.\n *\n * Note these are the only symbols exported for JNI by the VM.\n */\njint JNI_GetDefaultJavaVMInitArgs(void*);\njint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);\njint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);\n\n#define JNIIMPORT\n#define JNIEXPORT  __attribute__ ((visibility (\"default\")))\n#define JNICALL\n\n/*\n * Prototypes for functions exported by loadable shared libs.  These are\n * called by JNI, not provided by JNI.\n */\nJNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved);\nJNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved);\n\n#ifdef __cplusplus\n}\n#endif\n\n\n/*\n * Manifest constants.\n */\n#define JNI_FALSE   0\n#define JNI_TRUE    1\n\n#define JNI_VERSION_1_1 0x00010001\n#define JNI_VERSION_1_2 0x00010002\n#define JNI_VERSION_1_4 0x00010004\n#define JNI_VERSION_1_6 0x00010006\n\n#define JNI_OK          (0)         /* no error */\n#define JNI_ERR         (-1)        /* generic error */\n#define JNI_EDETACHED   (-2)        /* thread detached from the VM */\n#define JNI_EVERSION    (-3)        /* JNI version error */\n\n#define JNI_COMMIT      1           /* copy content, do not free buffer */\n#define JNI_ABORT       2           /* free buffer w/o copying back */\n\n#endif  /* JNI_H_ */\n"
  },
  {
    "path": "lib/nlohmann/json.hpp",
    "content": "//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n/****************************************************************************\\\n * Note on documentation: The source files contain links to the online      *\n * documentation of the public API at https://json.nlohmann.me. This URL    *\n * contains the most recent documentation and should also be applicable to  *\n * previous versions; documentation for deprecated functions is not         *\n * removed, but marked deprecated. See \"Generate documentation\" section in  *\n * file docs/README.md.                                                     *\n\\****************************************************************************/\n\n#ifndef INCLUDE_NLOHMANN_JSON_HPP_\n#define INCLUDE_NLOHMANN_JSON_HPP_\n\n#include <algorithm> // all_of, find, for_each\n#include <cstddef> // nullptr_t, ptrdiff_t, size_t\n#include <functional> // hash, less\n#include <initializer_list> // initializer_list\n#ifndef JSON_NO_IO\n    #include <iosfwd> // istream, ostream\n#endif  // JSON_NO_IO\n#include <iterator> // random_access_iterator_tag\n#include <memory> // unique_ptr\n#include <string> // string, stoi, to_string\n#include <utility> // declval, forward, move, pair, swap\n#include <vector> // vector\n\n// #include <nlohmann/adl_serializer.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <utility>\n\n// #include <nlohmann/detail/abi_macros.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// This file contains all macro definitions affecting or depending on the ABI\n\n#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK\n    #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)\n        #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3\n            #warning \"Already included a different version of the library!\"\n        #endif\n    #endif\n#endif\n\n#define NLOHMANN_JSON_VERSION_MAJOR 3   // NOLINT(modernize-macro-to-enum)\n#define NLOHMANN_JSON_VERSION_MINOR 11  // NOLINT(modernize-macro-to-enum)\n#define NLOHMANN_JSON_VERSION_PATCH 3   // NOLINT(modernize-macro-to-enum)\n\n#ifndef JSON_DIAGNOSTICS\n    #define JSON_DIAGNOSTICS 0\n#endif\n\n#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON\n    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n#endif\n\n#if JSON_DIAGNOSTICS\n    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag\n#else\n    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS\n#endif\n\n#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON\n    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp\n#else\n    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON\n#endif\n\n#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION\n    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n#endif\n\n// Construct the namespace ABI tags component\n#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b\n#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \\\n    NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)\n\n#define NLOHMANN_JSON_ABI_TAGS                                       \\\n    NLOHMANN_JSON_ABI_TAGS_CONCAT(                                   \\\n            NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS,                       \\\n            NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)\n\n// Construct the namespace version component\n#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \\\n    _v ## major ## _ ## minor ## _ ## patch\n#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \\\n    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)\n\n#if NLOHMANN_JSON_NAMESPACE_NO_VERSION\n#define NLOHMANN_JSON_NAMESPACE_VERSION\n#else\n#define NLOHMANN_JSON_NAMESPACE_VERSION                                 \\\n    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \\\n                                           NLOHMANN_JSON_VERSION_MINOR, \\\n                                           NLOHMANN_JSON_VERSION_PATCH)\n#endif\n\n// Combine namespace components\n#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b\n#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \\\n    NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)\n\n#ifndef NLOHMANN_JSON_NAMESPACE\n#define NLOHMANN_JSON_NAMESPACE               \\\n    nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \\\n            NLOHMANN_JSON_ABI_TAGS,           \\\n            NLOHMANN_JSON_NAMESPACE_VERSION)\n#endif\n\n#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN\n#define NLOHMANN_JSON_NAMESPACE_BEGIN                \\\n    namespace nlohmann                               \\\n    {                                                \\\n    inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \\\n                NLOHMANN_JSON_ABI_TAGS,              \\\n                NLOHMANN_JSON_NAMESPACE_VERSION)     \\\n    {\n#endif\n\n#ifndef NLOHMANN_JSON_NAMESPACE_END\n#define NLOHMANN_JSON_NAMESPACE_END                                     \\\n    }  /* namespace (inline namespace) NOLINT(readability/namespace) */ \\\n    }  // namespace nlohmann\n#endif\n\n// #include <nlohmann/detail/conversions/from_json.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // transform\n#include <array> // array\n#include <forward_list> // forward_list\n#include <iterator> // inserter, front_inserter, end\n#include <map> // map\n#include <string> // string\n#include <tuple> // tuple, make_tuple\n#include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible\n#include <unordered_map> // unordered_map\n#include <utility> // pair, declval\n#include <valarray> // valarray\n\n// #include <nlohmann/detail/exceptions.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef> // nullptr_t\n#include <exception> // exception\n#if JSON_DIAGNOSTICS\n    #include <numeric> // accumulate\n#endif\n#include <stdexcept> // runtime_error\n#include <string> // to_string\n#include <vector> // vector\n\n// #include <nlohmann/detail/value_t.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <array> // array\n#include <cstddef> // size_t\n#include <cstdint> // uint8_t\n#include <string> // string\n\n// #include <nlohmann/detail/macro_scope.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <utility> // declval, pair\n// #include <nlohmann/detail/meta/detected.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <type_traits>\n\n// #include <nlohmann/detail/meta/void_t.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename ...Ts> struct make_void\n{\n    using type = void;\n};\ntemplate<typename ...Ts> using void_t = typename make_void<Ts...>::type;\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n// https://en.cppreference.com/w/cpp/experimental/is_detected\nstruct nonesuch\n{\n    nonesuch() = delete;\n    ~nonesuch() = delete;\n    nonesuch(nonesuch const&) = delete;\n    nonesuch(nonesuch const&&) = delete;\n    void operator=(nonesuch const&) = delete;\n    void operator=(nonesuch&&) = delete;\n};\n\ntemplate<class Default,\n         class AlwaysVoid,\n         template<class...> class Op,\n         class... Args>\nstruct detector\n{\n    using value_t = std::false_type;\n    using type = Default;\n};\n\ntemplate<class Default, template<class...> class Op, class... Args>\nstruct detector<Default, void_t<Op<Args...>>, Op, Args...>\n{\n    using value_t = std::true_type;\n    using type = Op<Args...>;\n};\n\ntemplate<template<class...> class Op, class... Args>\nusing is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;\n\ntemplate<template<class...> class Op, class... Args>\nstruct is_detected_lazy : is_detected<Op, Args...> { };\n\ntemplate<template<class...> class Op, class... Args>\nusing detected_t = typename detector<nonesuch, void, Op, Args...>::type;\n\ntemplate<class Default, template<class...> class Op, class... Args>\nusing detected_or = detector<Default, void, Op, Args...>;\n\ntemplate<class Default, template<class...> class Op, class... Args>\nusing detected_or_t = typename detected_or<Default, Op, Args...>::type;\n\ntemplate<class Expected, template<class...> class Op, class... Args>\nusing is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;\n\ntemplate<class To, template<class...> class Op, class... Args>\nusing is_detected_convertible =\n    std::is_convertible<detected_t<Op, Args...>, To>;\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/thirdparty/hedley/hedley.hpp>\n\n\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson <evan@nemerson.com>\n// SPDX-License-Identifier: MIT\n\n/* Hedley - https://nemequ.github.io/hedley\n * Created by Evan Nemerson <evan@nemerson.com>\n */\n\n#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)\n#if defined(JSON_HEDLEY_VERSION)\n    #undef JSON_HEDLEY_VERSION\n#endif\n#define JSON_HEDLEY_VERSION 15\n\n#if defined(JSON_HEDLEY_STRINGIFY_EX)\n    #undef JSON_HEDLEY_STRINGIFY_EX\n#endif\n#define JSON_HEDLEY_STRINGIFY_EX(x) #x\n\n#if defined(JSON_HEDLEY_STRINGIFY)\n    #undef JSON_HEDLEY_STRINGIFY\n#endif\n#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)\n\n#if defined(JSON_HEDLEY_CONCAT_EX)\n    #undef JSON_HEDLEY_CONCAT_EX\n#endif\n#define JSON_HEDLEY_CONCAT_EX(a,b) a##b\n\n#if defined(JSON_HEDLEY_CONCAT)\n    #undef JSON_HEDLEY_CONCAT\n#endif\n#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)\n\n#if defined(JSON_HEDLEY_CONCAT3_EX)\n    #undef JSON_HEDLEY_CONCAT3_EX\n#endif\n#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c\n\n#if defined(JSON_HEDLEY_CONCAT3)\n    #undef JSON_HEDLEY_CONCAT3\n#endif\n#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)\n\n#if defined(JSON_HEDLEY_VERSION_ENCODE)\n    #undef JSON_HEDLEY_VERSION_ENCODE\n#endif\n#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))\n\n#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)\n    #undef JSON_HEDLEY_VERSION_DECODE_MAJOR\n#endif\n#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)\n\n#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)\n    #undef JSON_HEDLEY_VERSION_DECODE_MINOR\n#endif\n#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)\n\n#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)\n    #undef JSON_HEDLEY_VERSION_DECODE_REVISION\n#endif\n#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)\n\n#if defined(JSON_HEDLEY_GNUC_VERSION)\n    #undef JSON_HEDLEY_GNUC_VERSION\n#endif\n#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)\n    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)\n#elif defined(__GNUC__)\n    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)\n    #undef JSON_HEDLEY_GNUC_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_GNUC_VERSION)\n    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_MSVC_VERSION)\n    #undef JSON_HEDLEY_MSVC_VERSION\n#endif\n#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)\n    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)\n#elif defined(_MSC_FULL_VER) && !defined(__ICL)\n    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)\n#elif defined(_MSC_VER) && !defined(__ICL)\n    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)\n#endif\n\n#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)\n    #undef JSON_HEDLEY_MSVC_VERSION_CHECK\n#endif\n#if !defined(JSON_HEDLEY_MSVC_VERSION)\n    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)\n#elif defined(_MSC_VER) && (_MSC_VER >= 1400)\n    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))\n#elif defined(_MSC_VER) && (_MSC_VER >= 1200)\n    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))\n#else\n    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))\n#endif\n\n#if defined(JSON_HEDLEY_INTEL_VERSION)\n    #undef JSON_HEDLEY_INTEL_VERSION\n#endif\n#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)\n    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)\n#elif defined(__INTEL_COMPILER) && !defined(__ICL)\n    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)\n#endif\n\n#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)\n    #undef JSON_HEDLEY_INTEL_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_INTEL_VERSION)\n    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_INTEL_CL_VERSION)\n    #undef JSON_HEDLEY_INTEL_CL_VERSION\n#endif\n#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)\n    #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)\n#endif\n\n#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)\n    #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_INTEL_CL_VERSION)\n    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_PGI_VERSION)\n    #undef JSON_HEDLEY_PGI_VERSION\n#endif\n#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)\n    #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)\n#endif\n\n#if defined(JSON_HEDLEY_PGI_VERSION_CHECK)\n    #undef JSON_HEDLEY_PGI_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_PGI_VERSION)\n    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_SUNPRO_VERSION)\n    #undef JSON_HEDLEY_SUNPRO_VERSION\n#endif\n#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)\n    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)\n#elif defined(__SUNPRO_C)\n    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)\n#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)\n    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)\n#elif defined(__SUNPRO_CC)\n    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)\n#endif\n\n#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)\n    #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_SUNPRO_VERSION)\n    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)\n    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION\n#endif\n#if defined(__EMSCRIPTEN__)\n    #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)\n#endif\n\n#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)\n    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)\n    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_ARM_VERSION)\n    #undef JSON_HEDLEY_ARM_VERSION\n#endif\n#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)\n    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)\n#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)\n    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)\n#endif\n\n#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)\n    #undef JSON_HEDLEY_ARM_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_ARM_VERSION)\n    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_IBM_VERSION)\n    #undef JSON_HEDLEY_IBM_VERSION\n#endif\n#if defined(__ibmxl__)\n    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)\n#elif defined(__xlC__) && defined(__xlC_ver__)\n    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)\n#elif defined(__xlC__)\n    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)\n#endif\n\n#if defined(JSON_HEDLEY_IBM_VERSION_CHECK)\n    #undef JSON_HEDLEY_IBM_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_IBM_VERSION)\n    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_VERSION)\n    #undef JSON_HEDLEY_TI_VERSION\n#endif\n#if \\\n    defined(__TI_COMPILER_VERSION__) && \\\n    ( \\\n      defined(__TMS470__) || defined(__TI_ARM__) || \\\n      defined(__MSP430__) || \\\n      defined(__TMS320C2000__) \\\n    )\n#if (__TI_COMPILER_VERSION__ >= 16000000)\n    #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n#endif\n\n#if defined(JSON_HEDLEY_TI_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_VERSION)\n    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL2000_VERSION)\n    #undef JSON_HEDLEY_TI_CL2000_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)\n    #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_CL2000_VERSION)\n    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL430_VERSION)\n    #undef JSON_HEDLEY_TI_CL430_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)\n    #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_CL430_VERSION)\n    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)\n    #undef JSON_HEDLEY_TI_ARMCL_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))\n    #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)\n    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL6X_VERSION)\n    #undef JSON_HEDLEY_TI_CL6X_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)\n    #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_CL6X_VERSION)\n    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL7X_VERSION)\n    #undef JSON_HEDLEY_TI_CL7X_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)\n    #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_CL7X_VERSION)\n    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)\n    #undef JSON_HEDLEY_TI_CLPRU_VERSION\n#endif\n#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)\n    #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)\n    #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)\n    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_CRAY_VERSION)\n    #undef JSON_HEDLEY_CRAY_VERSION\n#endif\n#if defined(_CRAYC)\n    #if defined(_RELEASE_PATCHLEVEL)\n        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)\n    #else\n        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)\n    #endif\n#endif\n\n#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)\n    #undef JSON_HEDLEY_CRAY_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_CRAY_VERSION)\n    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_IAR_VERSION)\n    #undef JSON_HEDLEY_IAR_VERSION\n#endif\n#if defined(__IAR_SYSTEMS_ICC__)\n    #if __VER__ > 1000\n        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))\n    #else\n        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)\n    #endif\n#endif\n\n#if defined(JSON_HEDLEY_IAR_VERSION_CHECK)\n    #undef JSON_HEDLEY_IAR_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_IAR_VERSION)\n    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_TINYC_VERSION)\n    #undef JSON_HEDLEY_TINYC_VERSION\n#endif\n#if defined(__TINYC__)\n    #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)\n#endif\n\n#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)\n    #undef JSON_HEDLEY_TINYC_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_TINYC_VERSION)\n    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_DMC_VERSION)\n    #undef JSON_HEDLEY_DMC_VERSION\n#endif\n#if defined(__DMC__)\n    #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)\n#endif\n\n#if defined(JSON_HEDLEY_DMC_VERSION_CHECK)\n    #undef JSON_HEDLEY_DMC_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_DMC_VERSION)\n    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_COMPCERT_VERSION)\n    #undef JSON_HEDLEY_COMPCERT_VERSION\n#endif\n#if defined(__COMPCERT_VERSION__)\n    #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)\n#endif\n\n#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)\n    #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_COMPCERT_VERSION)\n    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_PELLES_VERSION)\n    #undef JSON_HEDLEY_PELLES_VERSION\n#endif\n#if defined(__POCC__)\n    #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)\n#endif\n\n#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)\n    #undef JSON_HEDLEY_PELLES_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_PELLES_VERSION)\n    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_MCST_LCC_VERSION)\n    #undef JSON_HEDLEY_MCST_LCC_VERSION\n#endif\n#if defined(__LCC__) && defined(__LCC_MINOR__)\n    #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)\n#endif\n\n#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)\n    #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_MCST_LCC_VERSION)\n    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_VERSION)\n    #undef JSON_HEDLEY_GCC_VERSION\n#endif\n#if \\\n    defined(JSON_HEDLEY_GNUC_VERSION) && \\\n    !defined(__clang__) && \\\n    !defined(JSON_HEDLEY_INTEL_VERSION) && \\\n    !defined(JSON_HEDLEY_PGI_VERSION) && \\\n    !defined(JSON_HEDLEY_ARM_VERSION) && \\\n    !defined(JSON_HEDLEY_CRAY_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_CL430_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \\\n    !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \\\n    !defined(__COMPCERT__) && \\\n    !defined(JSON_HEDLEY_MCST_LCC_VERSION)\n    #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION\n#endif\n\n#if defined(JSON_HEDLEY_GCC_VERSION_CHECK)\n    #undef JSON_HEDLEY_GCC_VERSION_CHECK\n#endif\n#if defined(JSON_HEDLEY_GCC_VERSION)\n    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))\n#else\n    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)\n    #undef JSON_HEDLEY_HAS_ATTRIBUTE\n#endif\n#if \\\n  defined(__has_attribute) && \\\n  ( \\\n    (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \\\n  )\n#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)\n#else\n#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)\n    #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE\n#endif\n#if defined(__has_attribute)\n    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)\n    #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE\n#endif\n#if defined(__has_attribute)\n    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)\n#else\n    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)\n    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE\n#endif\n#if \\\n    defined(__has_cpp_attribute) && \\\n    defined(__cplusplus) && \\\n    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))\n    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)\n#else\n    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)\n    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS\n#endif\n#if !defined(__cplusplus) || !defined(__has_cpp_attribute)\n    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)\n#elif \\\n    !defined(JSON_HEDLEY_PGI_VERSION) && \\\n    !defined(JSON_HEDLEY_IAR_VERSION) && \\\n    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \\\n    (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))\n    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)\n#else\n    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)\n    #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE\n#endif\n#if defined(__has_cpp_attribute) && defined(__cplusplus)\n    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)\n    #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE\n#endif\n#if defined(__has_cpp_attribute) && defined(__cplusplus)\n    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)\n#else\n    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_BUILTIN)\n    #undef JSON_HEDLEY_HAS_BUILTIN\n#endif\n#if defined(__has_builtin)\n    #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)\n#else\n    #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)\n    #undef JSON_HEDLEY_GNUC_HAS_BUILTIN\n#endif\n#if defined(__has_builtin)\n    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)\n    #undef JSON_HEDLEY_GCC_HAS_BUILTIN\n#endif\n#if defined(__has_builtin)\n    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)\n#else\n    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_FEATURE)\n    #undef JSON_HEDLEY_HAS_FEATURE\n#endif\n#if defined(__has_feature)\n    #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)\n#else\n    #define JSON_HEDLEY_HAS_FEATURE(feature) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)\n    #undef JSON_HEDLEY_GNUC_HAS_FEATURE\n#endif\n#if defined(__has_feature)\n    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_FEATURE)\n    #undef JSON_HEDLEY_GCC_HAS_FEATURE\n#endif\n#if defined(__has_feature)\n    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)\n#else\n    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_EXTENSION)\n    #undef JSON_HEDLEY_HAS_EXTENSION\n#endif\n#if defined(__has_extension)\n    #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)\n#else\n    #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)\n    #undef JSON_HEDLEY_GNUC_HAS_EXTENSION\n#endif\n#if defined(__has_extension)\n    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)\n    #undef JSON_HEDLEY_GCC_HAS_EXTENSION\n#endif\n#if defined(__has_extension)\n    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)\n#else\n    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)\n    #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE\n#endif\n#if defined(__has_declspec_attribute)\n    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)\n#else\n    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)\n    #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE\n#endif\n#if defined(__has_declspec_attribute)\n    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)\n    #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE\n#endif\n#if defined(__has_declspec_attribute)\n    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)\n#else\n    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_HAS_WARNING)\n    #undef JSON_HEDLEY_HAS_WARNING\n#endif\n#if defined(__has_warning)\n    #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)\n#else\n    #define JSON_HEDLEY_HAS_WARNING(warning) (0)\n#endif\n\n#if defined(JSON_HEDLEY_GNUC_HAS_WARNING)\n    #undef JSON_HEDLEY_GNUC_HAS_WARNING\n#endif\n#if defined(__has_warning)\n    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)\n#else\n    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_GCC_HAS_WARNING)\n    #undef JSON_HEDLEY_GCC_HAS_WARNING\n#endif\n#if defined(__has_warning)\n    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)\n#else\n    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if \\\n    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \\\n    defined(__clang__) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \\\n    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \\\n    (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))\n    #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)\n#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)\n    #define JSON_HEDLEY_PRAGMA(value) __pragma(value)\n#else\n    #define JSON_HEDLEY_PRAGMA(value)\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)\n    #undef JSON_HEDLEY_DIAGNOSTIC_PUSH\n#endif\n#if defined(JSON_HEDLEY_DIAGNOSTIC_POP)\n    #undef JSON_HEDLEY_DIAGNOSTIC_POP\n#endif\n#if defined(__clang__)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"clang diagnostic push\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"clang diagnostic pop\")\n#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"warning(push)\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"warning(pop)\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"GCC diagnostic push\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"GCC diagnostic pop\")\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))\n    #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))\n#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"push\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"pop\")\n#elif \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"diag_push\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"diag_pop\")\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma(\"warning(push)\")\n    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma(\"warning(pop)\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_PUSH\n    #define JSON_HEDLEY_DIAGNOSTIC_POP\n#endif\n\n/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for\n   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_\n#endif\n#if defined(__cplusplus)\n#  if JSON_HEDLEY_HAS_WARNING(\"-Wc++98-compat\")\n#    if JSON_HEDLEY_HAS_WARNING(\"-Wc++17-extensions\")\n#      if JSON_HEDLEY_HAS_WARNING(\"-Wc++1z-extensions\")\n#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++98-compat\\\"\") \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++17-extensions\\\"\") \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++1z-extensions\\\"\") \\\n    xpr \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#      else\n#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++98-compat\\\"\") \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++17-extensions\\\"\") \\\n    xpr \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#      endif\n#    else\n#      define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++98-compat\\\"\") \\\n    xpr \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#    endif\n#  endif\n#endif\n#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x\n#endif\n\n#if defined(JSON_HEDLEY_CONST_CAST)\n    #undef JSON_HEDLEY_CONST_CAST\n#endif\n#if defined(__cplusplus)\n#  define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))\n#elif \\\n  JSON_HEDLEY_HAS_WARNING(\"-Wcast-qual\") || \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n#  define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \\\n        JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n        JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \\\n        ((T) (expr)); \\\n        JSON_HEDLEY_DIAGNOSTIC_POP \\\n    }))\n#else\n#  define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))\n#endif\n\n#if defined(JSON_HEDLEY_REINTERPRET_CAST)\n    #undef JSON_HEDLEY_REINTERPRET_CAST\n#endif\n#if defined(__cplusplus)\n    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))\n#else\n    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))\n#endif\n\n#if defined(JSON_HEDLEY_STATIC_CAST)\n    #undef JSON_HEDLEY_STATIC_CAST\n#endif\n#if defined(__cplusplus)\n    #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))\n#else\n    #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))\n#endif\n\n#if defined(JSON_HEDLEY_CPP_CAST)\n    #undef JSON_HEDLEY_CPP_CAST\n#endif\n#if defined(__cplusplus)\n#  if JSON_HEDLEY_HAS_WARNING(\"-Wold-style-cast\")\n#    define JSON_HEDLEY_CPP_CAST(T, expr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wold-style-cast\\\"\") \\\n    ((T) (expr)) \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#  elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)\n#    define JSON_HEDLEY_CPP_CAST(T, expr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"diag_suppress=Pe137\") \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#  else\n#    define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))\n#  endif\n#else\n#  define JSON_HEDLEY_CPP_CAST(T, expr) (expr)\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wdeprecated-declarations\")\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"warning(disable:1478 1786)\")\n#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"diag_suppress 1215,1216,1444,1445\")\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"diag_suppress 1215,1444\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"GCC diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))\n#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"diag_suppress 1215,1444\")\n#elif \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"diag_suppress 1291,1718\")\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)\")\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"error_messages(off,symdeprecated,symdeprecated2)\")\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"diag_suppress=Pe1444,Pe1215\")\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma(\"warn(disable:2241)\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wunknown-pragmas\")\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"clang diagnostic ignored \\\"-Wunknown-pragmas\\\"\")\n#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"warning(disable:161)\")\n#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"diag_suppress 1675\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"GCC diagnostic ignored \\\"-Wunknown-pragmas\\\"\")\n#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))\n#elif \\\n    JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"diag_suppress 163\")\n#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"diag_suppress 163\")\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"diag_suppress=Pe161\")\n#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma(\"diag_suppress 161\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wunknown-attributes\")\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"clang diagnostic ignored \\\"-Wunknown-attributes\\\"\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"GCC diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"warning(disable:1292)\")\n#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))\n#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"diag_suppress 1097,1098\")\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"diag_suppress 1097\")\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"error_messages(off,attrskipunsup)\")\n#elif \\\n    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"diag_suppress 1173\")\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"diag_suppress=Pe1097\")\n#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma(\"diag_suppress 1097\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wcast-qual\")\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma(\"clang diagnostic ignored \\\"-Wcast-qual\\\"\")\n#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma(\"warning(disable:2203 2331)\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma(\"GCC diagnostic ignored \\\"-Wcast-qual\\\"\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL\n#endif\n\n#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)\n    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wunused-function\")\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma(\"clang diagnostic ignored \\\"-Wunused-function\\\"\")\n#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma(\"GCC diagnostic ignored \\\"-Wunused-function\\\"\")\n#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))\n#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma(\"diag_suppress 3142\")\n#else\n    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION\n#endif\n\n#if defined(JSON_HEDLEY_DEPRECATED)\n    #undef JSON_HEDLEY_DEPRECATED\n#endif\n#if defined(JSON_HEDLEY_DEPRECATED_FOR)\n    #undef JSON_HEDLEY_DEPRECATED_FOR\n#endif\n#if \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated(\"Since \" # since))\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated(\"Since \" #since \"; use \" #replacement))\n#elif \\\n    (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__(\"Since \" #since)))\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__(\"Since \" #since \"; use \" #replacement)))\n#elif defined(__cplusplus) && (__cplusplus >= 201402L)\n    #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated(\"Since \" #since)]])\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated(\"Since \" #since \"; use \" #replacement)]])\n#elif \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \\\n    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)\n    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \\\n    JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_DEPRECATED(since) _Pragma(\"deprecated\")\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma(\"deprecated\")\n#else\n    #define JSON_HEDLEY_DEPRECATED(since)\n    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)\n#endif\n\n#if defined(JSON_HEDLEY_UNAVAILABLE)\n    #undef JSON_HEDLEY_UNAVAILABLE\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__(\"Not available until \" #available_since)))\n#else\n    #define JSON_HEDLEY_UNAVAILABLE(available_since)\n#endif\n\n#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)\n    #undef JSON_HEDLEY_WARN_UNUSED_RESULT\n#endif\n#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)\n    #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))\n#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])\n#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])\n#elif defined(_Check_return_) /* SAL */\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_\n#else\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT\n    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)\n#endif\n\n#if defined(JSON_HEDLEY_SENTINEL)\n    #undef JSON_HEDLEY_SENTINEL\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))\n#else\n    #define JSON_HEDLEY_SENTINEL(position)\n#endif\n\n#if defined(JSON_HEDLEY_NO_RETURN)\n    #undef JSON_HEDLEY_NO_RETURN\n#endif\n#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_NO_RETURN __noreturn\n#elif \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))\n#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L\n    #define JSON_HEDLEY_NO_RETURN _Noreturn\n#elif defined(__cplusplus) && (__cplusplus >= 201103L)\n    #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])\n#elif \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)\n    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)\n    #define JSON_HEDLEY_NO_RETURN _Pragma(\"does_not_return\")\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)\n#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)\n    #define JSON_HEDLEY_NO_RETURN _Pragma(\"FUNC_NEVER_RETURNS;\")\n#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)\n    #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)\n    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)\n#else\n    #define JSON_HEDLEY_NO_RETURN\n#endif\n\n#if defined(JSON_HEDLEY_NO_ESCAPE)\n    #undef JSON_HEDLEY_NO_ESCAPE\n#endif\n#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)\n    #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))\n#else\n    #define JSON_HEDLEY_NO_ESCAPE\n#endif\n\n#if defined(JSON_HEDLEY_UNREACHABLE)\n    #undef JSON_HEDLEY_UNREACHABLE\n#endif\n#if defined(JSON_HEDLEY_UNREACHABLE_RETURN)\n    #undef JSON_HEDLEY_UNREACHABLE_RETURN\n#endif\n#if defined(JSON_HEDLEY_ASSUME)\n    #undef JSON_HEDLEY_ASSUME\n#endif\n#if \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_ASSUME(expr) __assume(expr)\n#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)\n    #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)\n#elif \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)\n    #if defined(__cplusplus)\n        #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)\n    #else\n        #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)\n    #endif\n#endif\n#if \\\n    (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \\\n    JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()\n#elif defined(JSON_HEDLEY_ASSUME)\n    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)\n#endif\n#if !defined(JSON_HEDLEY_ASSUME)\n    #if defined(JSON_HEDLEY_UNREACHABLE)\n        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))\n    #else\n        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)\n    #endif\n#endif\n#if defined(JSON_HEDLEY_UNREACHABLE)\n    #if  \\\n        JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \\\n        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)\n        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))\n    #else\n        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()\n    #endif\n#else\n    #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)\n#endif\n#if !defined(JSON_HEDLEY_UNREACHABLE)\n    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)\n#endif\n\nJSON_HEDLEY_DIAGNOSTIC_PUSH\n#if JSON_HEDLEY_HAS_WARNING(\"-Wpedantic\")\n    #pragma clang diagnostic ignored \"-Wpedantic\"\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wc++98-compat-pedantic\") && defined(__cplusplus)\n    #pragma clang diagnostic ignored \"-Wc++98-compat-pedantic\"\n#endif\n#if JSON_HEDLEY_GCC_HAS_WARNING(\"-Wvariadic-macros\",4,0,0)\n    #if defined(__clang__)\n        #pragma clang diagnostic ignored \"-Wvariadic-macros\"\n    #elif defined(JSON_HEDLEY_GCC_VERSION)\n        #pragma GCC diagnostic ignored \"-Wvariadic-macros\"\n    #endif\n#endif\n#if defined(JSON_HEDLEY_NON_NULL)\n    #undef JSON_HEDLEY_NON_NULL\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)\n    #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))\n#else\n    #define JSON_HEDLEY_NON_NULL(...)\n#endif\nJSON_HEDLEY_DIAGNOSTIC_POP\n\n#if defined(JSON_HEDLEY_PRINTF_FORMAT)\n    #undef JSON_HEDLEY_PRINTF_FORMAT\n#endif\n#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)\n    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))\n#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)\n    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))\n#elif \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(format) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)\n    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))\n#else\n    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)\n#endif\n\n#if defined(JSON_HEDLEY_CONSTEXPR)\n    #undef JSON_HEDLEY_CONSTEXPR\n#endif\n#if defined(__cplusplus)\n    #if __cplusplus >= 201103L\n        #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)\n    #endif\n#endif\n#if !defined(JSON_HEDLEY_CONSTEXPR)\n    #define JSON_HEDLEY_CONSTEXPR\n#endif\n\n#if defined(JSON_HEDLEY_PREDICT)\n    #undef JSON_HEDLEY_PREDICT\n#endif\n#if defined(JSON_HEDLEY_LIKELY)\n    #undef JSON_HEDLEY_LIKELY\n#endif\n#if defined(JSON_HEDLEY_UNLIKELY)\n    #undef JSON_HEDLEY_UNLIKELY\n#endif\n#if defined(JSON_HEDLEY_UNPREDICTABLE)\n    #undef JSON_HEDLEY_UNPREDICTABLE\n#endif\n#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)\n    #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))\n#endif\n#if \\\n  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \\\n  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n#  define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability(  (expr), (value), (probability))\n#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability)   __builtin_expect_with_probability(!!(expr),    1   , (probability))\n#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability)  __builtin_expect_with_probability(!!(expr),    0   , (probability))\n#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )\n#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )\n#elif \\\n  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n  (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \\\n  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \\\n  JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \\\n  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \\\n  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \\\n  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n  JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \\\n  JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \\\n  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n#  define JSON_HEDLEY_PREDICT(expr, expected, probability) \\\n    (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))\n#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \\\n    (__extension__ ({ \\\n        double hedley_probability_ = (probability); \\\n        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \\\n    }))\n#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \\\n    (__extension__ ({ \\\n        double hedley_probability_ = (probability); \\\n        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \\\n    }))\n#  define JSON_HEDLEY_LIKELY(expr)   __builtin_expect(!!(expr), 1)\n#  define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)\n#else\n#  define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))\n#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))\n#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))\n#  define JSON_HEDLEY_LIKELY(expr) (!!(expr))\n#  define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))\n#endif\n#if !defined(JSON_HEDLEY_UNPREDICTABLE)\n    #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)\n#endif\n\n#if defined(JSON_HEDLEY_MALLOC)\n    #undef JSON_HEDLEY_MALLOC\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)\n    #define JSON_HEDLEY_MALLOC _Pragma(\"returns_new_memory\")\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_MALLOC __declspec(restrict)\n#else\n    #define JSON_HEDLEY_MALLOC\n#endif\n\n#if defined(JSON_HEDLEY_PURE)\n    #undef JSON_HEDLEY_PURE\n#endif\n#if \\\n  JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n  JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \\\n  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n#  define JSON_HEDLEY_PURE __attribute__((__pure__))\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)\n#  define JSON_HEDLEY_PURE _Pragma(\"does_not_write_global_data\")\n#elif defined(__cplusplus) && \\\n    ( \\\n      JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \\\n      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \\\n      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \\\n    )\n#  define JSON_HEDLEY_PURE _Pragma(\"FUNC_IS_PURE;\")\n#else\n#  define JSON_HEDLEY_PURE\n#endif\n\n#if defined(JSON_HEDLEY_CONST)\n    #undef JSON_HEDLEY_CONST\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(const) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_CONST __attribute__((__const__))\n#elif \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)\n    #define JSON_HEDLEY_CONST _Pragma(\"no_side_effect\")\n#else\n    #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE\n#endif\n\n#if defined(JSON_HEDLEY_RESTRICT)\n    #undef JSON_HEDLEY_RESTRICT\n#endif\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)\n    #define JSON_HEDLEY_RESTRICT restrict\n#elif \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \\\n    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \\\n    defined(__clang__) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_RESTRICT __restrict\n#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)\n    #define JSON_HEDLEY_RESTRICT _Restrict\n#else\n    #define JSON_HEDLEY_RESTRICT\n#endif\n\n#if defined(JSON_HEDLEY_INLINE)\n    #undef JSON_HEDLEY_INLINE\n#endif\n#if \\\n    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \\\n    (defined(__cplusplus) && (__cplusplus >= 199711L))\n    #define JSON_HEDLEY_INLINE inline\n#elif \\\n    defined(JSON_HEDLEY_GCC_VERSION) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)\n    #define JSON_HEDLEY_INLINE __inline__\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_INLINE __inline\n#else\n    #define JSON_HEDLEY_INLINE\n#endif\n\n#if defined(JSON_HEDLEY_ALWAYS_INLINE)\n    #undef JSON_HEDLEY_ALWAYS_INLINE\n#endif\n#if \\\n  JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \\\n  JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)\n#  define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE\n#elif \\\n  JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \\\n  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n#  define JSON_HEDLEY_ALWAYS_INLINE __forceinline\n#elif defined(__cplusplus) && \\\n    ( \\\n      JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n      JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n      JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \\\n      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n      JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \\\n    )\n#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma(\"FUNC_ALWAYS_INLINE;\")\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma(\"inline=forced\")\n#else\n#  define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE\n#endif\n\n#if defined(JSON_HEDLEY_NEVER_INLINE)\n    #undef JSON_HEDLEY_NEVER_INLINE\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \\\n    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \\\n    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \\\n    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \\\n    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \\\n    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \\\n    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \\\n    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \\\n    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)\n    #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)\n#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)\n    #define JSON_HEDLEY_NEVER_INLINE _Pragma(\"noinline\")\n#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)\n    #define JSON_HEDLEY_NEVER_INLINE _Pragma(\"FUNC_CANNOT_INLINE;\")\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n    #define JSON_HEDLEY_NEVER_INLINE _Pragma(\"inline=never\")\n#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)\n    #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)\n    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)\n#else\n    #define JSON_HEDLEY_NEVER_INLINE\n#endif\n\n#if defined(JSON_HEDLEY_PRIVATE)\n    #undef JSON_HEDLEY_PRIVATE\n#endif\n#if defined(JSON_HEDLEY_PUBLIC)\n    #undef JSON_HEDLEY_PUBLIC\n#endif\n#if defined(JSON_HEDLEY_IMPORT)\n    #undef JSON_HEDLEY_IMPORT\n#endif\n#if defined(_WIN32) || defined(__CYGWIN__)\n#  define JSON_HEDLEY_PRIVATE\n#  define JSON_HEDLEY_PUBLIC   __declspec(dllexport)\n#  define JSON_HEDLEY_IMPORT   __declspec(dllimport)\n#else\n#  if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \\\n    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \\\n    ( \\\n      defined(__TI_EABI__) && \\\n      ( \\\n        (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \\\n        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \\\n      ) \\\n    ) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n#    define JSON_HEDLEY_PRIVATE __attribute__((__visibility__(\"hidden\")))\n#    define JSON_HEDLEY_PUBLIC  __attribute__((__visibility__(\"default\")))\n#  else\n#    define JSON_HEDLEY_PRIVATE\n#    define JSON_HEDLEY_PUBLIC\n#  endif\n#  define JSON_HEDLEY_IMPORT    extern\n#endif\n\n#if defined(JSON_HEDLEY_NO_THROW)\n    #undef JSON_HEDLEY_NO_THROW\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))\n#elif \\\n    JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)\n    #define JSON_HEDLEY_NO_THROW __declspec(nothrow)\n#else\n    #define JSON_HEDLEY_NO_THROW\n#endif\n\n#if defined(JSON_HEDLEY_FALL_THROUGH)\n    #undef JSON_HEDLEY_FALL_THROUGH\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))\n#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)\n    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])\n#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)\n    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])\n#elif defined(__fallthrough) /* SAL */\n    #define JSON_HEDLEY_FALL_THROUGH __fallthrough\n#else\n    #define JSON_HEDLEY_FALL_THROUGH\n#endif\n\n#if defined(JSON_HEDLEY_RETURNS_NON_NULL)\n    #undef JSON_HEDLEY_RETURNS_NON_NULL\n#endif\n#if \\\n    JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))\n#elif defined(_Ret_notnull_) /* SAL */\n    #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_\n#else\n    #define JSON_HEDLEY_RETURNS_NON_NULL\n#endif\n\n#if defined(JSON_HEDLEY_ARRAY_PARAM)\n    #undef JSON_HEDLEY_ARRAY_PARAM\n#endif\n#if \\\n    defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \\\n    !defined(__STDC_NO_VLA__) && \\\n    !defined(__cplusplus) && \\\n    !defined(JSON_HEDLEY_PGI_VERSION) && \\\n    !defined(JSON_HEDLEY_TINYC_VERSION)\n    #define JSON_HEDLEY_ARRAY_PARAM(name) (name)\n#else\n    #define JSON_HEDLEY_ARRAY_PARAM(name)\n#endif\n\n#if defined(JSON_HEDLEY_IS_CONSTANT)\n    #undef JSON_HEDLEY_IS_CONSTANT\n#endif\n#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)\n    #undef JSON_HEDLEY_REQUIRE_CONSTEXPR\n#endif\n/* JSON_HEDLEY_IS_CONSTEXPR_ is for\n   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */\n#if defined(JSON_HEDLEY_IS_CONSTEXPR_)\n    #undef JSON_HEDLEY_IS_CONSTEXPR_\n#endif\n#if \\\n    JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \\\n    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \\\n    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \\\n    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \\\n    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \\\n    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \\\n    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \\\n    JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \\\n    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)\n    #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)\n#endif\n#if !defined(__cplusplus)\n#  if \\\n       JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \\\n       JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \\\n       JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n       JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \\\n       JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \\\n       JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \\\n       JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)\n#if defined(__INTPTR_TYPE__)\n    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)\n#else\n    #include <stdint.h>\n    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)\n#endif\n#  elif \\\n       ( \\\n          defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \\\n          !defined(JSON_HEDLEY_SUNPRO_VERSION) && \\\n          !defined(JSON_HEDLEY_PGI_VERSION) && \\\n          !defined(JSON_HEDLEY_IAR_VERSION)) || \\\n       (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \\\n       JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \\\n       JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \\\n       JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \\\n       JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)\n#if defined(__INTPTR_TYPE__)\n    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)\n#else\n    #include <stdint.h>\n    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)\n#endif\n#  elif \\\n       defined(JSON_HEDLEY_GCC_VERSION) || \\\n       defined(JSON_HEDLEY_INTEL_VERSION) || \\\n       defined(JSON_HEDLEY_TINYC_VERSION) || \\\n       defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \\\n       JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \\\n       defined(JSON_HEDLEY_TI_CL2000_VERSION) || \\\n       defined(JSON_HEDLEY_TI_CL6X_VERSION) || \\\n       defined(JSON_HEDLEY_TI_CL7X_VERSION) || \\\n       defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \\\n       defined(__clang__)\n#    define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \\\n        sizeof(void) != \\\n        sizeof(*( \\\n                  1 ? \\\n                  ((void*) ((expr) * 0L) ) : \\\n((struct { char v[sizeof(void) * 2]; } *) 1) \\\n                ) \\\n              ) \\\n                                            )\n#  endif\n#endif\n#if defined(JSON_HEDLEY_IS_CONSTEXPR_)\n    #if !defined(JSON_HEDLEY_IS_CONSTANT)\n        #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)\n    #endif\n    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))\n#else\n    #if !defined(JSON_HEDLEY_IS_CONSTANT)\n        #define JSON_HEDLEY_IS_CONSTANT(expr) (0)\n    #endif\n    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)\n#endif\n\n#if defined(JSON_HEDLEY_BEGIN_C_DECLS)\n    #undef JSON_HEDLEY_BEGIN_C_DECLS\n#endif\n#if defined(JSON_HEDLEY_END_C_DECLS)\n    #undef JSON_HEDLEY_END_C_DECLS\n#endif\n#if defined(JSON_HEDLEY_C_DECL)\n    #undef JSON_HEDLEY_C_DECL\n#endif\n#if defined(__cplusplus)\n    #define JSON_HEDLEY_BEGIN_C_DECLS extern \"C\" {\n    #define JSON_HEDLEY_END_C_DECLS }\n    #define JSON_HEDLEY_C_DECL extern \"C\"\n#else\n    #define JSON_HEDLEY_BEGIN_C_DECLS\n    #define JSON_HEDLEY_END_C_DECLS\n    #define JSON_HEDLEY_C_DECL\n#endif\n\n#if defined(JSON_HEDLEY_STATIC_ASSERT)\n    #undef JSON_HEDLEY_STATIC_ASSERT\n#endif\n#if \\\n  !defined(__cplusplus) && ( \\\n      (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \\\n      (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \\\n      JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \\\n      JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \\\n      defined(_Static_assert) \\\n    )\n#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)\n#elif \\\n  (defined(__cplusplus) && (__cplusplus >= 201103L)) || \\\n  JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \\\n  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))\n#else\n#  define JSON_HEDLEY_STATIC_ASSERT(expr, message)\n#endif\n\n#if defined(JSON_HEDLEY_NULL)\n    #undef JSON_HEDLEY_NULL\n#endif\n#if defined(__cplusplus)\n    #if __cplusplus >= 201103L\n        #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)\n    #elif defined(NULL)\n        #define JSON_HEDLEY_NULL NULL\n    #else\n        #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)\n    #endif\n#elif defined(NULL)\n    #define JSON_HEDLEY_NULL NULL\n#else\n    #define JSON_HEDLEY_NULL ((void*) 0)\n#endif\n\n#if defined(JSON_HEDLEY_MESSAGE)\n    #undef JSON_HEDLEY_MESSAGE\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wunknown-pragmas\")\n#  define JSON_HEDLEY_MESSAGE(msg) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \\\n    JSON_HEDLEY_PRAGMA(message msg) \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#elif \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)\n#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)\n#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)\n#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)\n#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))\n#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)\n#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))\n#else\n#  define JSON_HEDLEY_MESSAGE(msg)\n#endif\n\n#if defined(JSON_HEDLEY_WARNING)\n    #undef JSON_HEDLEY_WARNING\n#endif\n#if JSON_HEDLEY_HAS_WARNING(\"-Wunknown-pragmas\")\n#  define JSON_HEDLEY_WARNING(msg) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \\\n    JSON_HEDLEY_PRAGMA(clang warning msg) \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#elif \\\n  JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \\\n  JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \\\n  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)\n#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)\n#elif \\\n  JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \\\n  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))\n#else\n#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)\n#endif\n\n#if defined(JSON_HEDLEY_REQUIRE)\n    #undef JSON_HEDLEY_REQUIRE\n#endif\n#if defined(JSON_HEDLEY_REQUIRE_MSG)\n    #undef JSON_HEDLEY_REQUIRE_MSG\n#endif\n#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)\n#  if JSON_HEDLEY_HAS_WARNING(\"-Wgcc-compat\")\n#    define JSON_HEDLEY_REQUIRE(expr) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wgcc-compat\\\"\") \\\n    __attribute__((diagnose_if(!(expr), #expr, \"error\"))) \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \\\n    JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n    _Pragma(\"clang diagnostic ignored \\\"-Wgcc-compat\\\"\") \\\n    __attribute__((diagnose_if(!(expr), msg, \"error\"))) \\\n    JSON_HEDLEY_DIAGNOSTIC_POP\n#  else\n#    define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, \"error\")))\n#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, \"error\")))\n#  endif\n#else\n#  define JSON_HEDLEY_REQUIRE(expr)\n#  define JSON_HEDLEY_REQUIRE_MSG(expr,msg)\n#endif\n\n#if defined(JSON_HEDLEY_FLAGS)\n    #undef JSON_HEDLEY_FLAGS\n#endif\n#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING(\"-Wbitfield-enum-conversion\"))\n    #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))\n#else\n    #define JSON_HEDLEY_FLAGS\n#endif\n\n#if defined(JSON_HEDLEY_FLAGS_CAST)\n    #undef JSON_HEDLEY_FLAGS_CAST\n#endif\n#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)\n#  define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \\\n        JSON_HEDLEY_DIAGNOSTIC_PUSH \\\n        _Pragma(\"warning(disable:188)\") \\\n        ((T) (expr)); \\\n        JSON_HEDLEY_DIAGNOSTIC_POP \\\n    }))\n#else\n#  define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)\n#endif\n\n#if defined(JSON_HEDLEY_EMPTY_BASES)\n    #undef JSON_HEDLEY_EMPTY_BASES\n#endif\n#if \\\n    (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \\\n    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)\n    #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)\n#else\n    #define JSON_HEDLEY_EMPTY_BASES\n#endif\n\n/* Remaining macros are deprecated. */\n\n#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)\n    #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK\n#endif\n#if defined(__clang__)\n    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)\n#else\n    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)\n#endif\n\n#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)\n    #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE\n#endif\n#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)\n    #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE\n#endif\n#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)\n    #undef JSON_HEDLEY_CLANG_HAS_BUILTIN\n#endif\n#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)\n    #undef JSON_HEDLEY_CLANG_HAS_FEATURE\n#endif\n#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)\n    #undef JSON_HEDLEY_CLANG_HAS_EXTENSION\n#endif\n#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)\n    #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE\n#endif\n#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)\n\n#if defined(JSON_HEDLEY_CLANG_HAS_WARNING)\n    #undef JSON_HEDLEY_CLANG_HAS_WARNING\n#endif\n#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)\n\n#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */\n\n\n// This file contains all internal macro definitions (except those affecting ABI)\n// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\n// exclude unsupported compilers\n#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)\n    #if defined(__clang__)\n        #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400\n            #error \"unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers\"\n        #endif\n    #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))\n        #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800\n            #error \"unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers\"\n        #endif\n    #endif\n#endif\n\n// C++ language standard detection\n// if the user manually specified the used c++ version this is skipped\n#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)\n    #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)\n        #define JSON_HAS_CPP_20\n        #define JSON_HAS_CPP_17\n        #define JSON_HAS_CPP_14\n    #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464\n        #define JSON_HAS_CPP_17\n        #define JSON_HAS_CPP_14\n    #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)\n        #define JSON_HAS_CPP_14\n    #endif\n    // the cpp 11 flag is always specified because it is the minimal required version\n    #define JSON_HAS_CPP_11\n#endif\n\n#ifdef __has_include\n    #if __has_include(<version>)\n        #include <version>\n    #endif\n#endif\n\n#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)\n    #ifdef JSON_HAS_CPP_17\n        #if defined(__cpp_lib_filesystem)\n            #define JSON_HAS_FILESYSTEM 1\n        #elif defined(__cpp_lib_experimental_filesystem)\n            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n        #elif !defined(__has_include)\n            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n        #elif __has_include(<filesystem>)\n            #define JSON_HAS_FILESYSTEM 1\n        #elif __has_include(<experimental/filesystem>)\n            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n        #endif\n\n        // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/\n        #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n\n        // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support\n        #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n\n        // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support\n        #if defined(__clang_major__) && __clang_major__ < 7\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n\n        // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support\n        #if defined(_MSC_VER) && _MSC_VER < 1914\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n\n        // no filesystem support before iOS 13\n        #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n\n        // no filesystem support before macOS Catalina\n        #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500\n            #undef JSON_HAS_FILESYSTEM\n            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n        #endif\n    #endif\n#endif\n\n#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0\n#endif\n\n#ifndef JSON_HAS_FILESYSTEM\n    #define JSON_HAS_FILESYSTEM 0\n#endif\n\n#ifndef JSON_HAS_THREE_WAY_COMPARISON\n    #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \\\n        && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L\n        #define JSON_HAS_THREE_WAY_COMPARISON 1\n    #else\n        #define JSON_HAS_THREE_WAY_COMPARISON 0\n    #endif\n#endif\n\n#ifndef JSON_HAS_RANGES\n    // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error\n    #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427\n        #define JSON_HAS_RANGES 0\n    #elif defined(__cpp_lib_ranges)\n        #define JSON_HAS_RANGES 1\n    #else\n        #define JSON_HAS_RANGES 0\n    #endif\n#endif\n\n#ifndef JSON_HAS_STATIC_RTTI\n    #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0\n        #define JSON_HAS_STATIC_RTTI 1\n    #else\n        #define JSON_HAS_STATIC_RTTI 0\n    #endif\n#endif\n\n#ifdef JSON_HAS_CPP_17\n    #define JSON_INLINE_VARIABLE inline\n#else\n    #define JSON_INLINE_VARIABLE\n#endif\n\n#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)\n    #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]\n#else\n    #define JSON_NO_UNIQUE_ADDRESS\n#endif\n\n// disable documentation warnings on clang\n#if defined(__clang__)\n    #pragma clang diagnostic push\n    #pragma clang diagnostic ignored \"-Wdocumentation\"\n    #pragma clang diagnostic ignored \"-Wdocumentation-unknown-command\"\n#endif\n\n// allow disabling exceptions\n#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)\n    #define JSON_THROW(exception) throw exception\n    #define JSON_TRY try\n    #define JSON_CATCH(exception) catch(exception)\n    #define JSON_INTERNAL_CATCH(exception) catch(exception)\n#else\n    #include <cstdlib>\n    #define JSON_THROW(exception) std::abort()\n    #define JSON_TRY if(true)\n    #define JSON_CATCH(exception) if(false)\n    #define JSON_INTERNAL_CATCH(exception) if(false)\n#endif\n\n// override exception macros\n#if defined(JSON_THROW_USER)\n    #undef JSON_THROW\n    #define JSON_THROW JSON_THROW_USER\n#endif\n#if defined(JSON_TRY_USER)\n    #undef JSON_TRY\n    #define JSON_TRY JSON_TRY_USER\n#endif\n#if defined(JSON_CATCH_USER)\n    #undef JSON_CATCH\n    #define JSON_CATCH JSON_CATCH_USER\n    #undef JSON_INTERNAL_CATCH\n    #define JSON_INTERNAL_CATCH JSON_CATCH_USER\n#endif\n#if defined(JSON_INTERNAL_CATCH_USER)\n    #undef JSON_INTERNAL_CATCH\n    #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER\n#endif\n\n// allow overriding assert\n#if !defined(JSON_ASSERT)\n    #include <cassert> // assert\n    #define JSON_ASSERT(x) assert(x)\n#endif\n\n// allow to access some private functions (needed by the test suite)\n#if defined(JSON_TESTS_PRIVATE)\n    #define JSON_PRIVATE_UNLESS_TESTED public\n#else\n    #define JSON_PRIVATE_UNLESS_TESTED private\n#endif\n\n/*!\n@brief macro to briefly define a mapping between an enum and JSON\n@def NLOHMANN_JSON_SERIALIZE_ENUM\n@since version 3.4.0\n*/\n#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...)                                            \\\n    template<typename BasicJsonType>                                                            \\\n    inline void to_json(BasicJsonType& j, const ENUM_TYPE& e)                                   \\\n    {                                                                                           \\\n        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE \" must be an enum!\");          \\\n        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \\\n        auto it = std::find_if(std::begin(m), std::end(m),                                      \\\n                               [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool  \\\n        {                                                                                       \\\n            return ej_pair.first == e;                                                          \\\n        });                                                                                     \\\n        j = ((it != std::end(m)) ? it : std::begin(m))->second;                                 \\\n    }                                                                                           \\\n    template<typename BasicJsonType>                                                            \\\n    inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)                                 \\\n    {                                                                                           \\\n        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE \" must be an enum!\");          \\\n        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \\\n        auto it = std::find_if(std::begin(m), std::end(m),                                      \\\n                               [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \\\n        {                                                                                       \\\n            return ej_pair.second == j;                                                         \\\n        });                                                                                     \\\n        e = ((it != std::end(m)) ? it : std::begin(m))->first;                                  \\\n    }\n\n// Ugly macros to avoid uglier copy-paste when specializing basic_json. They\n// may be removed in the future once the class is split.\n\n#define NLOHMANN_BASIC_JSON_TPL_DECLARATION                                \\\n    template<template<typename, typename, typename...> class ObjectType,   \\\n             template<typename, typename...> class ArrayType,              \\\n             class StringType, class BooleanType, class NumberIntegerType, \\\n             class NumberUnsignedType, class NumberFloatType,              \\\n             template<typename> class AllocatorType,                       \\\n             template<typename, typename = void> class JSONSerializer,     \\\n             class BinaryType,                                             \\\n             class CustomBaseClass>\n\n#define NLOHMANN_BASIC_JSON_TPL                                            \\\n    basic_json<ObjectType, ArrayType, StringType, BooleanType,             \\\n    NumberIntegerType, NumberUnsignedType, NumberFloatType,                \\\n    AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>\n\n// Macros to simplify conversion from/to types\n\n#define NLOHMANN_JSON_EXPAND( x ) x\n#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME\n#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \\\n        NLOHMANN_JSON_PASTE64, \\\n        NLOHMANN_JSON_PASTE63, \\\n        NLOHMANN_JSON_PASTE62, \\\n        NLOHMANN_JSON_PASTE61, \\\n        NLOHMANN_JSON_PASTE60, \\\n        NLOHMANN_JSON_PASTE59, \\\n        NLOHMANN_JSON_PASTE58, \\\n        NLOHMANN_JSON_PASTE57, \\\n        NLOHMANN_JSON_PASTE56, \\\n        NLOHMANN_JSON_PASTE55, \\\n        NLOHMANN_JSON_PASTE54, \\\n        NLOHMANN_JSON_PASTE53, \\\n        NLOHMANN_JSON_PASTE52, \\\n        NLOHMANN_JSON_PASTE51, \\\n        NLOHMANN_JSON_PASTE50, \\\n        NLOHMANN_JSON_PASTE49, \\\n        NLOHMANN_JSON_PASTE48, \\\n        NLOHMANN_JSON_PASTE47, \\\n        NLOHMANN_JSON_PASTE46, \\\n        NLOHMANN_JSON_PASTE45, \\\n        NLOHMANN_JSON_PASTE44, \\\n        NLOHMANN_JSON_PASTE43, \\\n        NLOHMANN_JSON_PASTE42, \\\n        NLOHMANN_JSON_PASTE41, \\\n        NLOHMANN_JSON_PASTE40, \\\n        NLOHMANN_JSON_PASTE39, \\\n        NLOHMANN_JSON_PASTE38, \\\n        NLOHMANN_JSON_PASTE37, \\\n        NLOHMANN_JSON_PASTE36, \\\n        NLOHMANN_JSON_PASTE35, \\\n        NLOHMANN_JSON_PASTE34, \\\n        NLOHMANN_JSON_PASTE33, \\\n        NLOHMANN_JSON_PASTE32, \\\n        NLOHMANN_JSON_PASTE31, \\\n        NLOHMANN_JSON_PASTE30, \\\n        NLOHMANN_JSON_PASTE29, \\\n        NLOHMANN_JSON_PASTE28, \\\n        NLOHMANN_JSON_PASTE27, \\\n        NLOHMANN_JSON_PASTE26, \\\n        NLOHMANN_JSON_PASTE25, \\\n        NLOHMANN_JSON_PASTE24, \\\n        NLOHMANN_JSON_PASTE23, \\\n        NLOHMANN_JSON_PASTE22, \\\n        NLOHMANN_JSON_PASTE21, \\\n        NLOHMANN_JSON_PASTE20, \\\n        NLOHMANN_JSON_PASTE19, \\\n        NLOHMANN_JSON_PASTE18, \\\n        NLOHMANN_JSON_PASTE17, \\\n        NLOHMANN_JSON_PASTE16, \\\n        NLOHMANN_JSON_PASTE15, \\\n        NLOHMANN_JSON_PASTE14, \\\n        NLOHMANN_JSON_PASTE13, \\\n        NLOHMANN_JSON_PASTE12, \\\n        NLOHMANN_JSON_PASTE11, \\\n        NLOHMANN_JSON_PASTE10, \\\n        NLOHMANN_JSON_PASTE9, \\\n        NLOHMANN_JSON_PASTE8, \\\n        NLOHMANN_JSON_PASTE7, \\\n        NLOHMANN_JSON_PASTE6, \\\n        NLOHMANN_JSON_PASTE5, \\\n        NLOHMANN_JSON_PASTE4, \\\n        NLOHMANN_JSON_PASTE3, \\\n        NLOHMANN_JSON_PASTE2, \\\n        NLOHMANN_JSON_PASTE1)(__VA_ARGS__))\n#define NLOHMANN_JSON_PASTE2(func, v1) func(v1)\n#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)\n#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)\n#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4)\n#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5)\n#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)\n#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)\n#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)\n#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)\n#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)\n#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)\n#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)\n#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)\n#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)\n#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)\n#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)\n#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)\n#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)\n#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)\n#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)\n#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)\n#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)\n#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)\n#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)\n#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)\n#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)\n#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)\n#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)\n#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)\n#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)\n#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)\n#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)\n#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)\n#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)\n#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)\n#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)\n#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)\n#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)\n#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)\n#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)\n#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)\n#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)\n#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)\n#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)\n#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)\n#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)\n#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)\n#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)\n#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)\n#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)\n#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)\n#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)\n#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)\n#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)\n#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)\n#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)\n#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)\n#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)\n#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)\n#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)\n#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)\n#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)\n#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)\n\n#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;\n#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);\n#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1);\n\n/*!\n@brief macro\n@def NLOHMANN_DEFINE_TYPE_INTRUSIVE\n@since version 3.9.0\n*/\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...)  \\\n    friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \\\n    friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }\n\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...)  \\\n    friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \\\n    friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }\n\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...)  \\\n    friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }\n\n/*!\n@brief macro\n@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE\n@since version 3.9.0\n*/\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...)  \\\n    inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \\\n    inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }\n\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...)  \\\n    inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }\n\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...)  \\\n    inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \\\n    inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }\n\n// inspired from https://stackoverflow.com/a/26745591\n// allows to call any std function as if (e.g. with begin):\n// using std::begin; begin(x);\n//\n// it allows using the detected idiom to retrieve the return type\n// of such an expression\n#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name)                                 \\\n    namespace detail {                                                            \\\n    using std::std_name;                                                          \\\n    \\\n    template<typename... T>                                                       \\\n    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \\\n    }                                                                             \\\n    \\\n    namespace detail2 {                                                           \\\n    struct std_name##_tag                                                         \\\n    {                                                                             \\\n    };                                                                            \\\n    \\\n    template<typename... T>                                                       \\\n    std_name##_tag std_name(T&&...);                                              \\\n    \\\n    template<typename... T>                                                       \\\n    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \\\n    \\\n    template<typename... T>                                                       \\\n    struct would_call_std_##std_name                                              \\\n    {                                                                             \\\n        static constexpr auto const value = ::nlohmann::detail::                  \\\n                                            is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \\\n    };                                                                            \\\n    } /* namespace detail2 */ \\\n    \\\n    template<typename... T>                                                       \\\n    struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...>   \\\n    {                                                                             \\\n    }\n\n#ifndef JSON_USE_IMPLICIT_CONVERSIONS\n    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n#endif\n\n#if JSON_USE_IMPLICIT_CONVERSIONS\n    #define JSON_EXPLICIT\n#else\n    #define JSON_EXPLICIT explicit\n#endif\n\n#ifndef JSON_DISABLE_ENUM_SERIALIZATION\n    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n#endif\n\n#ifndef JSON_USE_GLOBAL_UDLS\n    #define JSON_USE_GLOBAL_UDLS 1\n#endif\n\n#if JSON_HAS_THREE_WAY_COMPARISON\n    #include <compare> // partial_ordering\n#endif\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n///////////////////////////\n// JSON type enumeration //\n///////////////////////////\n\n/*!\n@brief the JSON type enumeration\n\nThis enumeration collects the different JSON types. It is internally used to\ndistinguish the stored values, and the functions @ref basic_json::is_null(),\n@ref basic_json::is_object(), @ref basic_json::is_array(),\n@ref basic_json::is_string(), @ref basic_json::is_boolean(),\n@ref basic_json::is_number() (with @ref basic_json::is_number_integer(),\n@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),\n@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and\n@ref basic_json::is_structured() rely on it.\n\n@note There are three enumeration entries (number_integer, number_unsigned, and\nnumber_float), because the library distinguishes these three types for numbers:\n@ref basic_json::number_unsigned_t is used for unsigned integers,\n@ref basic_json::number_integer_t is used for signed integers, and\n@ref basic_json::number_float_t is used for floating-point numbers or to\napproximate integers which do not fit in the limits of their respective type.\n\n@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON\nvalue with the default value for a given type\n\n@since version 1.0.0\n*/\nenum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\n/*!\n@brief comparison operator for JSON types\n\nReturns an ordering that is similar to Python:\n- order: null < boolean < number < object < array < string < binary\n- furthermore, each type is not smaller than itself\n- discarded values are not comparable\n- binary is represented as a b\"\" string in python and directly comparable to a\n  string; however, making a binary array directly comparable with a string would\n  be surprising behavior in a JSON file.\n\n@since version 1.0.0\n*/\n#if JSON_HAS_THREE_WAY_COMPARISON\n    inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD*\n#else\n    inline bool operator<(const value_t lhs, const value_t rhs) noexcept\n#endif\n{\n    static constexpr std::array<std::uint8_t, 9> order = {{\n            0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */,\n            1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */,\n            6 /* binary */\n        }\n    };\n\n    const auto l_index = static_cast<std::size_t>(lhs);\n    const auto r_index = static_cast<std::size_t>(rhs);\n#if JSON_HAS_THREE_WAY_COMPARISON\n    if (l_index < order.size() && r_index < order.size())\n    {\n        return order[l_index] <=> order[r_index]; // *NOPAD*\n    }\n    return std::partial_ordering::unordered;\n#else\n    return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index];\n#endif\n}\n\n// GCC selects the built-in operator< over an operator rewritten from\n// a user-defined spaceship operator\n// Clang, MSVC, and ICC select the rewritten candidate\n// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200)\n#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__)\ninline bool operator<(const value_t lhs, const value_t rhs) noexcept\n{\n    return std::is_lt(lhs <=> rhs); // *NOPAD*\n}\n#endif\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/string_escape.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/*!\n@brief replace all occurrences of a substring by another string\n\n@param[in,out] s  the string to manipulate; changed so that all\n               occurrences of @a f are replaced with @a t\n@param[in]     f  the substring to replace with @a t\n@param[in]     t  the string to replace @a f\n\n@pre The search string @a f must not be empty. **This precondition is\nenforced with an assertion.**\n\n@since version 2.0.0\n*/\ntemplate<typename StringType>\ninline void replace_substring(StringType& s, const StringType& f,\n                              const StringType& t)\n{\n    JSON_ASSERT(!f.empty());\n    for (auto pos = s.find(f);                // find first occurrence of f\n            pos != StringType::npos;          // make sure f was found\n            s.replace(pos, f.size(), t),      // replace with t, and\n            pos = s.find(f, pos + t.size()))  // find next occurrence of f\n    {}\n}\n\n/*!\n * @brief string escaping as described in RFC 6901 (Sect. 4)\n * @param[in] s string to escape\n * @return    escaped string\n *\n * Note the order of escaping \"~\" to \"~0\" and \"/\" to \"~1\" is important.\n */\ntemplate<typename StringType>\ninline StringType escape(StringType s)\n{\n    replace_substring(s, StringType{\"~\"}, StringType{\"~0\"});\n    replace_substring(s, StringType{\"/\"}, StringType{\"~1\"});\n    return s;\n}\n\n/*!\n * @brief string unescaping as described in RFC 6901 (Sect. 4)\n * @param[in] s string to unescape\n * @return    unescaped string\n *\n * Note the order of escaping \"~1\" to \"/\" and \"~0\" to \"~\" is important.\n */\ntemplate<typename StringType>\nstatic void unescape(StringType& s)\n{\n    replace_substring(s, StringType{\"~1\"}, StringType{\"/\"});\n    replace_substring(s, StringType{\"~0\"}, StringType{\"~\"});\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/input/position_t.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef> // size_t\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/// struct to capture the start position of the current token\nstruct position_t\n{\n    /// the total number of characters read\n    std::size_t chars_read_total = 0;\n    /// the number of characters read in the current line\n    std::size_t chars_read_current_line = 0;\n    /// the number of lines read\n    std::size_t lines_read = 0;\n\n    /// conversion to size_t to preserve SAX interface\n    constexpr operator size_t() const\n    {\n        return chars_read_total;\n    }\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-FileCopyrightText: 2018 The Abseil Authors\n// SPDX-License-Identifier: MIT\n\n\n\n#include <array> // array\n#include <cstddef> // size_t\n#include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type\n#include <utility> // index_sequence, make_index_sequence, index_sequence_for\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename T>\nusing uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;\n\n#ifdef JSON_HAS_CPP_14\n\n// the following utilities are natively available in C++14\nusing std::enable_if_t;\nusing std::index_sequence;\nusing std::make_index_sequence;\nusing std::index_sequence_for;\n\n#else\n\n// alias templates to reduce boilerplate\ntemplate<bool B, typename T = void>\nusing enable_if_t = typename std::enable_if<B, T>::type;\n\n// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h\n// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0.\n\n//// START OF CODE FROM GOOGLE ABSEIL\n\n// integer_sequence\n//\n// Class template representing a compile-time integer sequence. An instantiation\n// of `integer_sequence<T, Ints...>` has a sequence of integers encoded in its\n// type through its template arguments (which is a common need when\n// working with C++11 variadic templates). `absl::integer_sequence` is designed\n// to be a drop-in replacement for C++14's `std::integer_sequence`.\n//\n// Example:\n//\n//   template< class T, T... Ints >\n//   void user_function(integer_sequence<T, Ints...>);\n//\n//   int main()\n//   {\n//     // user_function's `T` will be deduced to `int` and `Ints...`\n//     // will be deduced to `0, 1, 2, 3, 4`.\n//     user_function(make_integer_sequence<int, 5>());\n//   }\ntemplate <typename T, T... Ints>\nstruct integer_sequence\n{\n    using value_type = T;\n    static constexpr std::size_t size() noexcept\n    {\n        return sizeof...(Ints);\n    }\n};\n\n// index_sequence\n//\n// A helper template for an `integer_sequence` of `size_t`,\n// `absl::index_sequence` is designed to be a drop-in replacement for C++14's\n// `std::index_sequence`.\ntemplate <size_t... Ints>\nusing index_sequence = integer_sequence<size_t, Ints...>;\n\nnamespace utility_internal\n{\n\ntemplate <typename Seq, size_t SeqSize, size_t Rem>\nstruct Extend;\n\n// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency.\ntemplate <typename T, T... Ints, size_t SeqSize>\nstruct Extend<integer_sequence<T, Ints...>, SeqSize, 0>\n{\n    using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >;\n};\n\ntemplate <typename T, T... Ints, size_t SeqSize>\nstruct Extend<integer_sequence<T, Ints...>, SeqSize, 1>\n{\n    using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >;\n};\n\n// Recursion helper for 'make_integer_sequence<T, N>'.\n// 'Gen<T, N>::type' is an alias for 'integer_sequence<T, 0, 1, ... N-1>'.\ntemplate <typename T, size_t N>\nstruct Gen\n{\n    using type =\n        typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type;\n};\n\ntemplate <typename T>\nstruct Gen<T, 0>\n{\n    using type = integer_sequence<T>;\n};\n\n}  // namespace utility_internal\n\n// Compile-time sequences of integers\n\n// make_integer_sequence\n//\n// This template alias is equivalent to\n// `integer_sequence<int, 0, 1, ..., N-1>`, and is designed to be a drop-in\n// replacement for C++14's `std::make_integer_sequence`.\ntemplate <typename T, T N>\nusing make_integer_sequence = typename utility_internal::Gen<T, N>::type;\n\n// make_index_sequence\n//\n// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`,\n// and is designed to be a drop-in replacement for C++14's\n// `std::make_index_sequence`.\ntemplate <size_t N>\nusing make_index_sequence = make_integer_sequence<size_t, N>;\n\n// index_sequence_for\n//\n// Converts a typename pack into an index sequence of the same length, and\n// is designed to be a drop-in replacement for C++14's\n// `std::index_sequence_for()`\ntemplate <typename... Ts>\nusing index_sequence_for = make_index_sequence<sizeof...(Ts)>;\n\n//// END OF CODE FROM GOOGLE ABSEIL\n\n#endif\n\n// dispatch utility (taken from ranges-v3)\ntemplate<unsigned N> struct priority_tag : priority_tag < N - 1 > {};\ntemplate<> struct priority_tag<0> {};\n\n// taken from ranges-v3\ntemplate<typename T>\nstruct static_const\n{\n    static JSON_INLINE_VARIABLE constexpr T value{};\n};\n\n#ifndef JSON_HAS_CPP_17\n    template<typename T>\n    constexpr T static_const<T>::value;\n#endif\n\ntemplate<typename T, typename... Args>\ninline constexpr std::array<T, sizeof...(Args)> make_array(Args&& ... args)\n{\n    return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <limits> // numeric_limits\n#include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type\n#include <utility> // declval\n#include <tuple> // tuple\n#include <string> // char_traits\n\n// #include <nlohmann/detail/iterators/iterator_traits.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <iterator> // random_access_iterator_tag\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/meta/void_t.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename It, typename = void>\nstruct iterator_types {};\n\ntemplate<typename It>\nstruct iterator_types <\n    It,\n    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,\n    typename It::reference, typename It::iterator_category >>\n{\n    using difference_type = typename It::difference_type;\n    using value_type = typename It::value_type;\n    using pointer = typename It::pointer;\n    using reference = typename It::reference;\n    using iterator_category = typename It::iterator_category;\n};\n\n// This is required as some compilers implement std::iterator_traits in a way that\n// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.\ntemplate<typename T, typename = void>\nstruct iterator_traits\n{\n};\n\ntemplate<typename T>\nstruct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>\n            : iterator_types<T>\n{\n};\n\ntemplate<typename T>\nstruct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>\n{\n    using iterator_category = std::random_access_iterator_tag;\n    using value_type = T;\n    using difference_type = ptrdiff_t;\n    using pointer = T*;\n    using reference = T&;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/call_std/begin.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\nNLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/call_std/end.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\nNLOHMANN_CAN_CALL_STD_FUNC_IMPL(end);\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/detected.hpp>\n\n// #include <nlohmann/json_fwd.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_\n    #define INCLUDE_NLOHMANN_JSON_FWD_HPP_\n\n    #include <cstdint> // int64_t, uint64_t\n    #include <map> // map\n    #include <memory> // allocator\n    #include <string> // string\n    #include <vector> // vector\n\n    // #include <nlohmann/detail/abi_macros.hpp>\n\n\n    /*!\n    @brief namespace for Niels Lohmann\n    @see https://github.com/nlohmann\n    @since version 1.0.0\n    */\n    NLOHMANN_JSON_NAMESPACE_BEGIN\n\n    /*!\n    @brief default JSONSerializer template argument\n\n    This serializer ignores the template arguments and uses ADL\n    ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))\n    for serialization.\n    */\n    template<typename T = void, typename SFINAE = void>\n    struct adl_serializer;\n\n    /// a class to store JSON values\n    /// @sa https://json.nlohmann.me/api/basic_json/\n    template<template<typename U, typename V, typename... Args> class ObjectType =\n    std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string, class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer =\n    adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError\n    class CustomBaseClass = void>\n    class basic_json;\n\n    /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document\n    /// @sa https://json.nlohmann.me/api/json_pointer/\n    template<typename RefStringType>\n    class json_pointer;\n\n    /*!\n    @brief default specialization\n    @sa https://json.nlohmann.me/api/json/\n    */\n    using json = basic_json<>;\n\n    /// @brief a minimal map-like container that preserves insertion order\n    /// @sa https://json.nlohmann.me/api/ordered_map/\n    template<class Key, class T, class IgnoredLess, class Allocator>\n    struct ordered_map;\n\n    /// @brief specialization that maintains the insertion order of object keys\n    /// @sa https://json.nlohmann.me/api/ordered_json/\n    using ordered_json = basic_json<nlohmann::ordered_map>;\n\n    NLOHMANN_JSON_NAMESPACE_END\n\n#endif  // INCLUDE_NLOHMANN_JSON_FWD_HPP_\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n/*!\n@brief detail namespace with internal helper functions\n\nThis namespace collects functions that should not be exposed,\nimplementations of some @ref basic_json methods, and meta-programming helpers.\n\n@since version 2.1.0\n*/\nnamespace detail\n{\n\n/////////////\n// helpers //\n/////////////\n\n// Note to maintainers:\n//\n// Every trait in this file expects a non CV-qualified type.\n// The only exceptions are in the 'aliases for detected' section\n// (i.e. those of the form: decltype(T::member_function(std::declval<T>())))\n//\n// In this case, T has to be properly CV-qualified to constraint the function arguments\n// (e.g. to_json(BasicJsonType&, const T&))\n\ntemplate<typename> struct is_basic_json : std::false_type {};\n\nNLOHMANN_BASIC_JSON_TPL_DECLARATION\nstruct is_basic_json<NLOHMANN_BASIC_JSON_TPL> : std::true_type {};\n\n// used by exceptions create() member functions\n// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t\n// false_type otherwise\ntemplate<typename BasicJsonContext>\nstruct is_basic_json_context :\n    std::integral_constant < bool,\n    is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value\n    || std::is_same<BasicJsonContext, std::nullptr_t>::value >\n{};\n\n//////////////////////\n// json_ref helpers //\n//////////////////////\n\ntemplate<typename>\nclass json_ref;\n\ntemplate<typename>\nstruct is_json_ref : std::false_type {};\n\ntemplate<typename T>\nstruct is_json_ref<json_ref<T>> : std::true_type {};\n\n//////////////////////////\n// aliases for detected //\n//////////////////////////\n\ntemplate<typename T>\nusing mapped_type_t = typename T::mapped_type;\n\ntemplate<typename T>\nusing key_type_t = typename T::key_type;\n\ntemplate<typename T>\nusing value_type_t = typename T::value_type;\n\ntemplate<typename T>\nusing difference_type_t = typename T::difference_type;\n\ntemplate<typename T>\nusing pointer_t = typename T::pointer;\n\ntemplate<typename T>\nusing reference_t = typename T::reference;\n\ntemplate<typename T>\nusing iterator_category_t = typename T::iterator_category;\n\ntemplate<typename T, typename... Args>\nusing to_json_function = decltype(T::to_json(std::declval<Args>()...));\n\ntemplate<typename T, typename... Args>\nusing from_json_function = decltype(T::from_json(std::declval<Args>()...));\n\ntemplate<typename T, typename U>\nusing get_template_function = decltype(std::declval<T>().template get<U>());\n\n// trait checking if JSONSerializer<T>::from_json(json const&, udt&) exists\ntemplate<typename BasicJsonType, typename T, typename = void>\nstruct has_from_json : std::false_type {};\n\n// trait checking if j.get<T> is valid\n// use this trait instead of std::is_constructible or std::is_convertible,\n// both rely on, or make use of implicit conversions, and thus fail when T\n// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958)\ntemplate <typename BasicJsonType, typename T>\nstruct is_getable\n{\n    static constexpr bool value = is_detected<get_template_function, const BasicJsonType&, T>::value;\n};\n\ntemplate<typename BasicJsonType, typename T>\nstruct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>\n{\n    using serializer = typename BasicJsonType::template json_serializer<T, void>;\n\n    static constexpr bool value =\n        is_detected_exact<void, from_json_function, serializer,\n        const BasicJsonType&, T&>::value;\n};\n\n// This trait checks if JSONSerializer<T>::from_json(json const&) exists\n// this overload is used for non-default-constructible user-defined-types\ntemplate<typename BasicJsonType, typename T, typename = void>\nstruct has_non_default_from_json : std::false_type {};\n\ntemplate<typename BasicJsonType, typename T>\nstruct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>\n{\n    using serializer = typename BasicJsonType::template json_serializer<T, void>;\n\n    static constexpr bool value =\n        is_detected_exact<T, from_json_function, serializer,\n        const BasicJsonType&>::value;\n};\n\n// This trait checks if BasicJsonType::json_serializer<T>::to_json exists\n// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion.\ntemplate<typename BasicJsonType, typename T, typename = void>\nstruct has_to_json : std::false_type {};\n\ntemplate<typename BasicJsonType, typename T>\nstruct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >>\n{\n    using serializer = typename BasicJsonType::template json_serializer<T, void>;\n\n    static constexpr bool value =\n        is_detected_exact<void, to_json_function, serializer, BasicJsonType&,\n        T>::value;\n};\n\ntemplate<typename T>\nusing detect_key_compare = typename T::key_compare;\n\ntemplate<typename T>\nstruct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {};\n\n// obtains the actual object key comparator\ntemplate<typename BasicJsonType>\nstruct actual_object_comparator\n{\n    using object_t = typename BasicJsonType::object_t;\n    using object_comparator_t = typename BasicJsonType::default_object_comparator_t;\n    using type = typename std::conditional < has_key_compare<object_t>::value,\n          typename object_t::key_compare, object_comparator_t>::type;\n};\n\ntemplate<typename BasicJsonType>\nusing actual_object_comparator_t = typename actual_object_comparator<BasicJsonType>::type;\n\n/////////////////\n// char_traits //\n/////////////////\n\n// Primary template of char_traits calls std char_traits\ntemplate<typename T>\nstruct char_traits : std::char_traits<T>\n{};\n\n// Explicitly define char traits for unsigned char since it is not standard\ntemplate<>\nstruct char_traits<unsigned char> : std::char_traits<char>\n{\n    using char_type = unsigned char;\n    using int_type = uint64_t;\n\n    // Redefine to_int_type function\n    static int_type to_int_type(char_type c) noexcept\n    {\n        return static_cast<int_type>(c);\n    }\n\n    static char_type to_char_type(int_type i) noexcept\n    {\n        return static_cast<char_type>(i);\n    }\n\n    static constexpr int_type eof() noexcept\n    {\n        return static_cast<int_type>(EOF);\n    }\n};\n\n// Explicitly define char traits for signed char since it is not standard\ntemplate<>\nstruct char_traits<signed char> : std::char_traits<char>\n{\n    using char_type = signed char;\n    using int_type = uint64_t;\n\n    // Redefine to_int_type function\n    static int_type to_int_type(char_type c) noexcept\n    {\n        return static_cast<int_type>(c);\n    }\n\n    static char_type to_char_type(int_type i) noexcept\n    {\n        return static_cast<char_type>(i);\n    }\n\n    static constexpr int_type eof() noexcept\n    {\n        return static_cast<int_type>(EOF);\n    }\n};\n\n///////////////////\n// is_ functions //\n///////////////////\n\n// https://en.cppreference.com/w/cpp/types/conjunction\ntemplate<class...> struct conjunction : std::true_type { };\ntemplate<class B> struct conjunction<B> : B { };\ntemplate<class B, class... Bn>\nstruct conjunction<B, Bn...>\n: std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type {};\n\n// https://en.cppreference.com/w/cpp/types/negation\ntemplate<class B> struct negation : std::integral_constant < bool, !B::value > { };\n\n// Reimplementation of is_constructible and is_default_constructible, due to them being broken for\n// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367).\n// This causes compile errors in e.g. clang 3.5 or gcc 4.9.\ntemplate <typename T>\nstruct is_default_constructible : std::is_default_constructible<T> {};\n\ntemplate <typename T1, typename T2>\nstruct is_default_constructible<std::pair<T1, T2>>\n            : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};\n\ntemplate <typename T1, typename T2>\nstruct is_default_constructible<const std::pair<T1, T2>>\n            : conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};\n\ntemplate <typename... Ts>\nstruct is_default_constructible<std::tuple<Ts...>>\n            : conjunction<is_default_constructible<Ts>...> {};\n\ntemplate <typename... Ts>\nstruct is_default_constructible<const std::tuple<Ts...>>\n            : conjunction<is_default_constructible<Ts>...> {};\n\ntemplate <typename T, typename... Args>\nstruct is_constructible : std::is_constructible<T, Args...> {};\n\ntemplate <typename T1, typename T2>\nstruct is_constructible<std::pair<T1, T2>> : is_default_constructible<std::pair<T1, T2>> {};\n\ntemplate <typename T1, typename T2>\nstruct is_constructible<const std::pair<T1, T2>> : is_default_constructible<const std::pair<T1, T2>> {};\n\ntemplate <typename... Ts>\nstruct is_constructible<std::tuple<Ts...>> : is_default_constructible<std::tuple<Ts...>> {};\n\ntemplate <typename... Ts>\nstruct is_constructible<const std::tuple<Ts...>> : is_default_constructible<const std::tuple<Ts...>> {};\n\ntemplate<typename T, typename = void>\nstruct is_iterator_traits : std::false_type {};\n\ntemplate<typename T>\nstruct is_iterator_traits<iterator_traits<T>>\n{\n  private:\n    using traits = iterator_traits<T>;\n\n  public:\n    static constexpr auto value =\n        is_detected<value_type_t, traits>::value &&\n        is_detected<difference_type_t, traits>::value &&\n        is_detected<pointer_t, traits>::value &&\n        is_detected<iterator_category_t, traits>::value &&\n        is_detected<reference_t, traits>::value;\n};\n\ntemplate<typename T>\nstruct is_range\n{\n  private:\n    using t_ref = typename std::add_lvalue_reference<T>::type;\n\n    using iterator = detected_t<result_of_begin, t_ref>;\n    using sentinel = detected_t<result_of_end, t_ref>;\n\n    // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator\n    // and https://en.cppreference.com/w/cpp/iterator/sentinel_for\n    // but reimplementing these would be too much work, as a lot of other concepts are used underneath\n    static constexpr auto is_iterator_begin =\n        is_iterator_traits<iterator_traits<iterator>>::value;\n\n  public:\n    static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;\n};\n\ntemplate<typename R>\nusing iterator_t = enable_if_t<is_range<R>::value, result_of_begin<decltype(std::declval<R&>())>>;\n\ntemplate<typename T>\nusing range_value_t = value_type_t<iterator_traits<iterator_t<T>>>;\n\n// The following implementation of is_complete_type is taken from\n// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/\n// and is written by Xiang Fan who agreed to using it in this library.\n\ntemplate<typename T, typename = void>\nstruct is_complete_type : std::false_type {};\n\ntemplate<typename T>\nstruct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_type {};\n\ntemplate<typename BasicJsonType, typename CompatibleObjectType,\n         typename = void>\nstruct is_compatible_object_type_impl : std::false_type {};\n\ntemplate<typename BasicJsonType, typename CompatibleObjectType>\nstruct is_compatible_object_type_impl <\n    BasicJsonType, CompatibleObjectType,\n    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&\n    is_detected<key_type_t, CompatibleObjectType>::value >>\n{\n    using object_t = typename BasicJsonType::object_t;\n\n    // macOS's is_constructible does not play well with nonesuch...\n    static constexpr bool value =\n        is_constructible<typename object_t::key_type,\n        typename CompatibleObjectType::key_type>::value &&\n        is_constructible<typename object_t::mapped_type,\n        typename CompatibleObjectType::mapped_type>::value;\n};\n\ntemplate<typename BasicJsonType, typename CompatibleObjectType>\nstruct is_compatible_object_type\n    : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};\n\ntemplate<typename BasicJsonType, typename ConstructibleObjectType,\n         typename = void>\nstruct is_constructible_object_type_impl : std::false_type {};\n\ntemplate<typename BasicJsonType, typename ConstructibleObjectType>\nstruct is_constructible_object_type_impl <\n    BasicJsonType, ConstructibleObjectType,\n    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&\n    is_detected<key_type_t, ConstructibleObjectType>::value >>\n{\n    using object_t = typename BasicJsonType::object_t;\n\n    static constexpr bool value =\n        (is_default_constructible<ConstructibleObjectType>::value &&\n         (std::is_move_assignable<ConstructibleObjectType>::value ||\n          std::is_copy_assignable<ConstructibleObjectType>::value) &&\n         (is_constructible<typename ConstructibleObjectType::key_type,\n          typename object_t::key_type>::value &&\n          std::is_same <\n          typename object_t::mapped_type,\n          typename ConstructibleObjectType::mapped_type >::value)) ||\n        (has_from_json<BasicJsonType,\n         typename ConstructibleObjectType::mapped_type>::value ||\n         has_non_default_from_json <\n         BasicJsonType,\n         typename ConstructibleObjectType::mapped_type >::value);\n};\n\ntemplate<typename BasicJsonType, typename ConstructibleObjectType>\nstruct is_constructible_object_type\n    : is_constructible_object_type_impl<BasicJsonType,\n      ConstructibleObjectType> {};\n\ntemplate<typename BasicJsonType, typename CompatibleStringType>\nstruct is_compatible_string_type\n{\n    static constexpr auto value =\n        is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;\n};\n\ntemplate<typename BasicJsonType, typename ConstructibleStringType>\nstruct is_constructible_string_type\n{\n    // launder type through decltype() to fix compilation failure on ICPC\n#ifdef __INTEL_COMPILER\n    using laundered_type = decltype(std::declval<ConstructibleStringType>());\n#else\n    using laundered_type = ConstructibleStringType;\n#endif\n\n    static constexpr auto value =\n        conjunction <\n        is_constructible<laundered_type, typename BasicJsonType::string_t>,\n        is_detected_exact<typename BasicJsonType::string_t::value_type,\n        value_type_t, laundered_type >>::value;\n};\n\ntemplate<typename BasicJsonType, typename CompatibleArrayType, typename = void>\nstruct is_compatible_array_type_impl : std::false_type {};\n\ntemplate<typename BasicJsonType, typename CompatibleArrayType>\nstruct is_compatible_array_type_impl <\n    BasicJsonType, CompatibleArrayType,\n    enable_if_t <\n    is_detected<iterator_t, CompatibleArrayType>::value&&\n    is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value&&\n// special case for types like std::filesystem::path whose iterator's value_type are themselves\n// c.f. https://github.com/nlohmann/json/pull/3073\n    !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value >>\n{\n    static constexpr bool value =\n        is_constructible<BasicJsonType,\n        range_value_t<CompatibleArrayType>>::value;\n};\n\ntemplate<typename BasicJsonType, typename CompatibleArrayType>\nstruct is_compatible_array_type\n    : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType> {};\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType, typename = void>\nstruct is_constructible_array_type_impl : std::false_type {};\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType>\nstruct is_constructible_array_type_impl <\n    BasicJsonType, ConstructibleArrayType,\n    enable_if_t<std::is_same<ConstructibleArrayType,\n    typename BasicJsonType::value_type>::value >>\n            : std::true_type {};\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType>\nstruct is_constructible_array_type_impl <\n    BasicJsonType, ConstructibleArrayType,\n    enable_if_t < !std::is_same<ConstructibleArrayType,\n    typename BasicJsonType::value_type>::value&&\n    !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value&&\n    is_default_constructible<ConstructibleArrayType>::value&&\n(std::is_move_assignable<ConstructibleArrayType>::value ||\n std::is_copy_assignable<ConstructibleArrayType>::value)&&\nis_detected<iterator_t, ConstructibleArrayType>::value&&\nis_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value&&\nis_detected<range_value_t, ConstructibleArrayType>::value&&\n// special case for types like std::filesystem::path whose iterator's value_type are themselves\n// c.f. https://github.com/nlohmann/json/pull/3073\n!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value&&\n        is_complete_type <\n        detected_t<range_value_t, ConstructibleArrayType >>::value >>\n{\n    using value_type = range_value_t<ConstructibleArrayType>;\n\n    static constexpr bool value =\n        std::is_same<value_type,\n        typename BasicJsonType::array_t::value_type>::value ||\n        has_from_json<BasicJsonType,\n        value_type>::value ||\n        has_non_default_from_json <\n        BasicJsonType,\n        value_type >::value;\n};\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType>\nstruct is_constructible_array_type\n    : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType> {};\n\ntemplate<typename RealIntegerType, typename CompatibleNumberIntegerType,\n         typename = void>\nstruct is_compatible_integer_type_impl : std::false_type {};\n\ntemplate<typename RealIntegerType, typename CompatibleNumberIntegerType>\nstruct is_compatible_integer_type_impl <\n    RealIntegerType, CompatibleNumberIntegerType,\n    enable_if_t < std::is_integral<RealIntegerType>::value&&\n    std::is_integral<CompatibleNumberIntegerType>::value&&\n    !std::is_same<bool, CompatibleNumberIntegerType>::value >>\n{\n    // is there an assert somewhere on overflows?\n    using RealLimits = std::numeric_limits<RealIntegerType>;\n    using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>;\n\n    static constexpr auto value =\n        is_constructible<RealIntegerType,\n        CompatibleNumberIntegerType>::value &&\n        CompatibleLimits::is_integer &&\n        RealLimits::is_signed == CompatibleLimits::is_signed;\n};\n\ntemplate<typename RealIntegerType, typename CompatibleNumberIntegerType>\nstruct is_compatible_integer_type\n    : is_compatible_integer_type_impl<RealIntegerType,\n      CompatibleNumberIntegerType> {};\n\ntemplate<typename BasicJsonType, typename CompatibleType, typename = void>\nstruct is_compatible_type_impl: std::false_type {};\n\ntemplate<typename BasicJsonType, typename CompatibleType>\nstruct is_compatible_type_impl <\n    BasicJsonType, CompatibleType,\n    enable_if_t<is_complete_type<CompatibleType>::value >>\n{\n    static constexpr bool value =\n        has_to_json<BasicJsonType, CompatibleType>::value;\n};\n\ntemplate<typename BasicJsonType, typename CompatibleType>\nstruct is_compatible_type\n    : is_compatible_type_impl<BasicJsonType, CompatibleType> {};\n\ntemplate<typename T1, typename T2>\nstruct is_constructible_tuple : std::false_type {};\n\ntemplate<typename T1, typename... Args>\nstruct is_constructible_tuple<T1, std::tuple<Args...>> : conjunction<is_constructible<T1, Args>...> {};\n\ntemplate<typename BasicJsonType, typename T>\nstruct is_json_iterator_of : std::false_type {};\n\ntemplate<typename BasicJsonType>\nstruct is_json_iterator_of<BasicJsonType, typename BasicJsonType::iterator> : std::true_type {};\n\ntemplate<typename BasicJsonType>\nstruct is_json_iterator_of<BasicJsonType, typename BasicJsonType::const_iterator> : std::true_type\n{};\n\n// checks if a given type T is a template specialization of Primary\ntemplate<template <typename...> class Primary, typename T>\nstruct is_specialization_of : std::false_type {};\n\ntemplate<template <typename...> class Primary, typename... Args>\nstruct is_specialization_of<Primary, Primary<Args...>> : std::true_type {};\n\ntemplate<typename T>\nusing is_json_pointer = is_specialization_of<::nlohmann::json_pointer, uncvref_t<T>>;\n\n// checks if A and B are comparable using Compare functor\ntemplate<typename Compare, typename A, typename B, typename = void>\nstruct is_comparable : std::false_type {};\n\ntemplate<typename Compare, typename A, typename B>\nstruct is_comparable<Compare, A, B, void_t<\ndecltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())),\ndecltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))\n>> : std::true_type {};\n\ntemplate<typename T>\nusing detect_is_transparent = typename T::is_transparent;\n\n// type trait to check if KeyType can be used as object key (without a BasicJsonType)\n// see is_usable_as_basic_json_key_type below\ntemplate<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,\n         bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>\nusing is_usable_as_key_type = typename std::conditional <\n                              is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value\n                              && !(ExcludeObjectKeyType && std::is_same<KeyType,\n                                   ObjectKeyType>::value)\n                              && (!RequireTransparentComparator\n                                  || is_detected <detect_is_transparent, Comparator>::value)\n                              && !is_json_pointer<KeyType>::value,\n                              std::true_type,\n                              std::false_type >::type;\n\n// type trait to check if KeyType can be used as object key\n// true if:\n//   - KeyType is comparable with BasicJsonType::object_t::key_type\n//   - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type\n//   - the comparator is transparent or RequireTransparentComparator is false\n//   - KeyType is not a JSON iterator or json_pointer\ntemplate<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true,\n         bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>\nusing is_usable_as_basic_json_key_type = typename std::conditional <\n        is_usable_as_key_type<typename BasicJsonType::object_comparator_t,\n        typename BasicJsonType::object_t::key_type, KeyTypeCVRef,\n        RequireTransparentComparator, ExcludeObjectKeyType>::value\n        && !is_json_iterator_of<BasicJsonType, KeyType>::value,\n        std::true_type,\n        std::false_type >::type;\n\ntemplate<typename ObjectType, typename KeyType>\nusing detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>()));\n\n// type trait to check if object_t has an erase() member functions accepting KeyType\ntemplate<typename BasicJsonType, typename KeyType>\nusing has_erase_with_key_type = typename std::conditional <\n                                is_detected <\n                                detect_erase_with_key_type,\n                                typename BasicJsonType::object_t, KeyType >::value,\n                                std::true_type,\n                                std::false_type >::type;\n\n// a naive helper to check if a type is an ordered_map (exploits the fact that\n// ordered_map inherits capacity() from std::vector)\ntemplate <typename T>\nstruct is_ordered_map\n{\n    using one = char;\n\n    struct two\n    {\n        char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n    };\n\n    template <typename C> static one test( decltype(&C::capacity) ) ;\n    template <typename C> static two test(...);\n\n    enum { value = sizeof(test<T>(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n};\n\n// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324)\ntemplate < typename T, typename U, enable_if_t < !std::is_same<T, U>::value, int > = 0 >\nT conditional_static_cast(U value)\n{\n    return static_cast<T>(value);\n}\n\ntemplate<typename T, typename U, enable_if_t<std::is_same<T, U>::value, int> = 0>\nT conditional_static_cast(U value)\n{\n    return value;\n}\n\ntemplate<typename... Types>\nusing all_integral = conjunction<std::is_integral<Types>...>;\n\ntemplate<typename... Types>\nusing all_signed = conjunction<std::is_signed<Types>...>;\n\ntemplate<typename... Types>\nusing all_unsigned = conjunction<std::is_unsigned<Types>...>;\n\n// there's a disjunction trait in another PR; replace when merged\ntemplate<typename... Types>\nusing same_sign = std::integral_constant < bool,\n      all_signed<Types...>::value || all_unsigned<Types...>::value >;\n\ntemplate<typename OfType, typename T>\nusing never_out_of_range = std::integral_constant < bool,\n      (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType)))\n      || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T)) >;\n\ntemplate<typename OfType, typename T,\n         bool OfTypeSigned = std::is_signed<OfType>::value,\n         bool TSigned = std::is_signed<T>::value>\nstruct value_in_range_of_impl2;\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl2<OfType, T, false, false>\n{\n    static constexpr bool test(T val)\n    {\n        using CommonType = typename std::common_type<OfType, T>::type;\n        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());\n    }\n};\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl2<OfType, T, true, false>\n{\n    static constexpr bool test(T val)\n    {\n        using CommonType = typename std::common_type<OfType, T>::type;\n        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());\n    }\n};\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl2<OfType, T, false, true>\n{\n    static constexpr bool test(T val)\n    {\n        using CommonType = typename std::common_type<OfType, T>::type;\n        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());\n    }\n};\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl2<OfType, T, true, true>\n{\n    static constexpr bool test(T val)\n    {\n        using CommonType = typename std::common_type<OfType, T>::type;\n        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())\n               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());\n    }\n};\n\ntemplate<typename OfType, typename T,\n         bool NeverOutOfRange = never_out_of_range<OfType, T>::value,\n         typename = detail::enable_if_t<all_integral<OfType, T>::value>>\nstruct value_in_range_of_impl1;\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl1<OfType, T, false>\n{\n    static constexpr bool test(T val)\n    {\n        return value_in_range_of_impl2<OfType, T>::test(val);\n    }\n};\n\ntemplate<typename OfType, typename T>\nstruct value_in_range_of_impl1<OfType, T, true>\n{\n    static constexpr bool test(T /*val*/)\n    {\n        return true;\n    }\n};\n\ntemplate<typename OfType, typename T>\ninline constexpr bool value_in_range_of(T val)\n{\n    return value_in_range_of_impl1<OfType, T>::test(val);\n}\n\ntemplate<bool Value>\nusing bool_constant = std::integral_constant<bool, Value>;\n\n///////////////////////////////////////////////////////////////////////////////\n// is_c_string\n///////////////////////////////////////////////////////////////////////////////\n\nnamespace impl\n{\n\ntemplate<typename T>\ninline constexpr bool is_c_string()\n{\n    using TUnExt = typename std::remove_extent<T>::type;\n    using TUnCVExt = typename std::remove_cv<TUnExt>::type;\n    using TUnPtr = typename std::remove_pointer<T>::type;\n    using TUnCVPtr = typename std::remove_cv<TUnPtr>::type;\n    return\n        (std::is_array<T>::value && std::is_same<TUnCVExt, char>::value)\n        || (std::is_pointer<T>::value && std::is_same<TUnCVPtr, char>::value);\n}\n\n}  // namespace impl\n\n// checks whether T is a [cv] char */[cv] char[] C string\ntemplate<typename T>\nstruct is_c_string : bool_constant<impl::is_c_string<T>()> {};\n\ntemplate<typename T>\nusing is_c_string_uncvref = is_c_string<uncvref_t<T>>;\n\n///////////////////////////////////////////////////////////////////////////////\n// is_transparent\n///////////////////////////////////////////////////////////////////////////////\n\nnamespace impl\n{\n\ntemplate<typename T>\ninline constexpr bool is_transparent()\n{\n    return is_detected<detect_is_transparent, T>::value;\n}\n\n}  // namespace impl\n\n// checks whether T has a member named is_transparent\ntemplate<typename T>\nstruct is_transparent : bool_constant<impl::is_transparent<T>()> {};\n\n///////////////////////////////////////////////////////////////////////////////\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/string_concat.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstring> // strlen\n#include <string> // string\n#include <utility> // forward\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/detected.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ninline std::size_t concat_length()\n{\n    return 0;\n}\n\ntemplate<typename... Args>\ninline std::size_t concat_length(const char* cstr, const Args& ... rest);\n\ntemplate<typename StringType, typename... Args>\ninline std::size_t concat_length(const StringType& str, const Args& ... rest);\n\ntemplate<typename... Args>\ninline std::size_t concat_length(const char /*c*/, const Args& ... rest)\n{\n    return 1 + concat_length(rest...);\n}\n\ntemplate<typename... Args>\ninline std::size_t concat_length(const char* cstr, const Args& ... rest)\n{\n    // cppcheck-suppress ignoredReturnValue\n    return ::strlen(cstr) + concat_length(rest...);\n}\n\ntemplate<typename StringType, typename... Args>\ninline std::size_t concat_length(const StringType& str, const Args& ... rest)\n{\n    return str.size() + concat_length(rest...);\n}\n\ntemplate<typename OutStringType>\ninline void concat_into(OutStringType& /*out*/)\n{}\n\ntemplate<typename StringType, typename Arg>\nusing string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));\n\ntemplate<typename StringType, typename Arg>\nusing detect_string_can_append = is_detected<string_can_append, StringType, Arg>;\n\ntemplate<typename StringType, typename Arg>\nusing string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ());\n\ntemplate<typename StringType, typename Arg>\nusing detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>;\n\ntemplate<typename StringType, typename Arg>\nusing string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));\n\ntemplate<typename StringType, typename Arg>\nusing detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>;\n\ntemplate<typename StringType, typename Arg>\nusing string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));\n\ntemplate<typename StringType, typename Arg>\nusing detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 >\ninline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && !detect_string_can_append_op<OutStringType, Arg>::value\n                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 >\ninline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && !detect_string_can_append_op<OutStringType, Arg>::value\n                         && !detect_string_can_append_iter<OutStringType, Arg>::value\n                         && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 >\ninline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);\n\ntemplate<typename OutStringType, typename Arg, typename... Args,\n         enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>\ninline void concat_into(OutStringType& out, Arg && arg, Args && ... rest)\n{\n    out.append(std::forward<Arg>(arg));\n    concat_into(out, std::forward<Args>(rest)...);\n}\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && detect_string_can_append_op<OutStringType, Arg>::value, int > >\ninline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest)\n{\n    out += std::forward<Arg>(arg);\n    concat_into(out, std::forward<Args>(rest)...);\n}\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && !detect_string_can_append_op<OutStringType, Arg>::value\n                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > >\ninline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)\n{\n    out.append(arg.begin(), arg.end());\n    concat_into(out, std::forward<Args>(rest)...);\n}\n\ntemplate < typename OutStringType, typename Arg, typename... Args,\n           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value\n                         && !detect_string_can_append_op<OutStringType, Arg>::value\n                         && !detect_string_can_append_iter<OutStringType, Arg>::value\n                         && detect_string_can_append_data<OutStringType, Arg>::value, int > >\ninline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)\n{\n    out.append(arg.data(), arg.size());\n    concat_into(out, std::forward<Args>(rest)...);\n}\n\ntemplate<typename OutStringType = std::string, typename... Args>\ninline OutStringType concat(Args && ... args)\n{\n    OutStringType str;\n    str.reserve(concat_length(args...));\n    concat_into(str, std::forward<Args>(args)...);\n    return str;\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n////////////////\n// exceptions //\n////////////////\n\n/// @brief general exception of the @ref basic_json class\n/// @sa https://json.nlohmann.me/api/basic_json/exception/\nclass exception : public std::exception\n{\n  public:\n    /// returns the explanatory string\n    const char* what() const noexcept override\n    {\n        return m.what();\n    }\n\n    /// the id of the exception\n    const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)\n\n  protected:\n    JSON_HEDLEY_NON_NULL(3)\n    exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)\n\n    static std::string name(const std::string& ename, int id_)\n    {\n        return concat(\"[json.exception.\", ename, '.', std::to_string(id_), \"] \");\n    }\n\n    static std::string diagnostics(std::nullptr_t /*leaf_element*/)\n    {\n        return \"\";\n    }\n\n    template<typename BasicJsonType>\n    static std::string diagnostics(const BasicJsonType* leaf_element)\n    {\n#if JSON_DIAGNOSTICS\n        std::vector<std::string> tokens;\n        for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)\n        {\n            switch (current->m_parent->type())\n            {\n                case value_t::array:\n                {\n                    for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)\n                    {\n                        if (&current->m_parent->m_data.m_value.array->operator[](i) == current)\n                        {\n                            tokens.emplace_back(std::to_string(i));\n                            break;\n                        }\n                    }\n                    break;\n                }\n\n                case value_t::object:\n                {\n                    for (const auto& element : *current->m_parent->m_data.m_value.object)\n                    {\n                        if (&element.second == current)\n                        {\n                            tokens.emplace_back(element.first.c_str());\n                            break;\n                        }\n                    }\n                    break;\n                }\n\n                case value_t::null: // LCOV_EXCL_LINE\n                case value_t::string: // LCOV_EXCL_LINE\n                case value_t::boolean: // LCOV_EXCL_LINE\n                case value_t::number_integer: // LCOV_EXCL_LINE\n                case value_t::number_unsigned: // LCOV_EXCL_LINE\n                case value_t::number_float: // LCOV_EXCL_LINE\n                case value_t::binary: // LCOV_EXCL_LINE\n                case value_t::discarded: // LCOV_EXCL_LINE\n                default:   // LCOV_EXCL_LINE\n                    break; // LCOV_EXCL_LINE\n            }\n        }\n\n        if (tokens.empty())\n        {\n            return \"\";\n        }\n\n        auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},\n                                   [](const std::string & a, const std::string & b)\n        {\n            return concat(a, '/', detail::escape(b));\n        });\n        return concat('(', str, \") \");\n#else\n        static_cast<void>(leaf_element);\n        return \"\";\n#endif\n    }\n\n  private:\n    /// an exception object as storage for error messages\n    std::runtime_error m;\n};\n\n/// @brief exception indicating a parse error\n/// @sa https://json.nlohmann.me/api/basic_json/parse_error/\nclass parse_error : public exception\n{\n  public:\n    /*!\n    @brief create a parse error exception\n    @param[in] id_       the id of the exception\n    @param[in] pos       the position where the error occurred (or with\n                         chars_read_total=0 if the position cannot be\n                         determined)\n    @param[in] what_arg  the explanatory string\n    @return parse_error object\n    */\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"parse_error\", id_), \"parse error\",\n                                     position_string(pos), \": \", exception::diagnostics(context), what_arg);\n        return {id_, pos.chars_read_total, w.c_str()};\n    }\n\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"parse_error\", id_), \"parse error\",\n                                     (byte_ != 0 ? (concat(\" at byte \", std::to_string(byte_))) : \"\"),\n                                     \": \", exception::diagnostics(context), what_arg);\n        return {id_, byte_, w.c_str()};\n    }\n\n    /*!\n    @brief byte index of the parse error\n\n    The byte index of the last read character in the input file.\n\n    @note For an input with n bytes, 1 is the index of the first character and\n          n+1 is the index of the terminating null byte or the end of file.\n          This also holds true when reading a byte vector (CBOR or MessagePack).\n    */\n    const std::size_t byte;\n\n  private:\n    parse_error(int id_, std::size_t byte_, const char* what_arg)\n        : exception(id_, what_arg), byte(byte_) {}\n\n    static std::string position_string(const position_t& pos)\n    {\n        return concat(\" at line \", std::to_string(pos.lines_read + 1),\n                      \", column \", std::to_string(pos.chars_read_current_line));\n    }\n};\n\n/// @brief exception indicating errors with iterators\n/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/\nclass invalid_iterator : public exception\n{\n  public:\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"invalid_iterator\", id_), exception::diagnostics(context), what_arg);\n        return {id_, w.c_str()};\n    }\n\n  private:\n    JSON_HEDLEY_NON_NULL(3)\n    invalid_iterator(int id_, const char* what_arg)\n        : exception(id_, what_arg) {}\n};\n\n/// @brief exception indicating executing a member function with a wrong type\n/// @sa https://json.nlohmann.me/api/basic_json/type_error/\nclass type_error : public exception\n{\n  public:\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static type_error create(int id_, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"type_error\", id_), exception::diagnostics(context), what_arg);\n        return {id_, w.c_str()};\n    }\n\n  private:\n    JSON_HEDLEY_NON_NULL(3)\n    type_error(int id_, const char* what_arg) : exception(id_, what_arg) {}\n};\n\n/// @brief exception indicating access out of the defined range\n/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/\nclass out_of_range : public exception\n{\n  public:\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"out_of_range\", id_), exception::diagnostics(context), what_arg);\n        return {id_, w.c_str()};\n    }\n\n  private:\n    JSON_HEDLEY_NON_NULL(3)\n    out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {}\n};\n\n/// @brief exception indicating other library errors\n/// @sa https://json.nlohmann.me/api/basic_json/other_error/\nclass other_error : public exception\n{\n  public:\n    template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>\n    static other_error create(int id_, const std::string& what_arg, BasicJsonContext context)\n    {\n        const std::string w = concat(exception::name(\"other_error\", id_), exception::diagnostics(context), what_arg);\n        return {id_, w.c_str()};\n    }\n\n  private:\n    JSON_HEDLEY_NON_NULL(3)\n    other_error(int id_, const char* what_arg) : exception(id_, what_arg) {}\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/identity_tag.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n// dispatching helper struct\ntemplate <class T> struct identity_tag {};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/std_fs.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\n#if JSON_HAS_EXPERIMENTAL_FILESYSTEM\n#include <experimental/filesystem>\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\nnamespace std_fs = std::experimental::filesystem;\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n#elif JSON_HAS_FILESYSTEM\n#include <filesystem>\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\nnamespace std_fs = std::filesystem;\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n#endif\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename std::nullptr_t& n)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_null()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be null, but is \", j.type_name()), &j));\n    }\n    n = nullptr;\n}\n\n// overloads for basic_json template parameters\ntemplate < typename BasicJsonType, typename ArithmeticType,\n           enable_if_t < std::is_arithmetic<ArithmeticType>::value&&\n                         !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,\n                         int > = 0 >\nvoid get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)\n{\n    switch (static_cast<value_t>(j))\n    {\n        case value_t::number_unsigned:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());\n            break;\n        }\n        case value_t::number_integer:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());\n            break;\n        }\n        case value_t::number_float:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());\n            break;\n        }\n\n        case value_t::null:\n        case value_t::object:\n        case value_t::array:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::binary:\n        case value_t::discarded:\n        default:\n            JSON_THROW(type_error::create(302, concat(\"type must be number, but is \", j.type_name()), &j));\n    }\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_boolean()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be boolean, but is \", j.type_name()), &j));\n    }\n    b = *j.template get_ptr<const typename BasicJsonType::boolean_t*>();\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_string()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be string, but is \", j.type_name()), &j));\n    }\n    s = *j.template get_ptr<const typename BasicJsonType::string_t*>();\n}\n\ntemplate <\n    typename BasicJsonType, typename StringType,\n    enable_if_t <\n        std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value\n        && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value\n        && !std::is_same<typename BasicJsonType::string_t, StringType>::value\n        && !is_json_ref<StringType>::value, int > = 0 >\ninline void from_json(const BasicJsonType& j, StringType& s)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_string()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be string, but is \", j.type_name()), &j));\n    }\n\n    s = *j.template get_ptr<const typename BasicJsonType::string_t*>();\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val)\n{\n    get_arithmetic_value(j, val);\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val)\n{\n    get_arithmetic_value(j, val);\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val)\n{\n    get_arithmetic_value(j, val);\n}\n\n#if !JSON_DISABLE_ENUM_SERIALIZATION\ntemplate<typename BasicJsonType, typename EnumType,\n         enable_if_t<std::is_enum<EnumType>::value, int> = 0>\ninline void from_json(const BasicJsonType& j, EnumType& e)\n{\n    typename std::underlying_type<EnumType>::type val;\n    get_arithmetic_value(j, val);\n    e = static_cast<EnumType>(val);\n}\n#endif  // JSON_DISABLE_ENUM_SERIALIZATION\n\n// forward_list doesn't have an insert method\ntemplate<typename BasicJsonType, typename T, typename Allocator,\n         enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>\ninline void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n    l.clear();\n    std::transform(j.rbegin(), j.rend(),\n                   std::front_inserter(l), [](const BasicJsonType & i)\n    {\n        return i.template get<T>();\n    });\n}\n\n// valarray doesn't have an insert method\ntemplate<typename BasicJsonType, typename T,\n         enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>\ninline void from_json(const BasicJsonType& j, std::valarray<T>& l)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n    l.resize(j.size());\n    std::transform(j.begin(), j.end(), std::begin(l),\n                   [](const BasicJsonType & elem)\n    {\n        return elem.template get<T>();\n    });\n}\n\ntemplate<typename BasicJsonType, typename T, std::size_t N>\nauto from_json(const BasicJsonType& j, T (&arr)[N])  // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n-> decltype(j.template get<T>(), void())\n{\n    for (std::size_t i = 0; i < N; ++i)\n    {\n        arr[i] = j.at(i).template get<T>();\n    }\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/)\n{\n    arr = *j.template get_ptr<const typename BasicJsonType::array_t*>();\n}\n\ntemplate<typename BasicJsonType, typename T, std::size_t N>\nauto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr,\n                          priority_tag<2> /*unused*/)\n-> decltype(j.template get<T>(), void())\n{\n    for (std::size_t i = 0; i < N; ++i)\n    {\n        arr[i] = j.at(i).template get<T>();\n    }\n}\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType,\n         enable_if_t<\n             std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,\n             int> = 0>\nauto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/)\n-> decltype(\n    arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),\n    j.template get<typename ConstructibleArrayType::value_type>(),\n    void())\n{\n    using std::end;\n\n    ConstructibleArrayType ret;\n    ret.reserve(j.size());\n    std::transform(j.begin(), j.end(),\n                   std::inserter(ret, end(ret)), [](const BasicJsonType & i)\n    {\n        // get<BasicJsonType>() returns *this, this won't call a from_json\n        // method when value_type is BasicJsonType\n        return i.template get<typename ConstructibleArrayType::value_type>();\n    });\n    arr = std::move(ret);\n}\n\ntemplate<typename BasicJsonType, typename ConstructibleArrayType,\n         enable_if_t<\n             std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,\n             int> = 0>\ninline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr,\n                                 priority_tag<0> /*unused*/)\n{\n    using std::end;\n\n    ConstructibleArrayType ret;\n    std::transform(\n        j.begin(), j.end(), std::inserter(ret, end(ret)),\n        [](const BasicJsonType & i)\n    {\n        // get<BasicJsonType>() returns *this, this won't call a from_json\n        // method when value_type is BasicJsonType\n        return i.template get<typename ConstructibleArrayType::value_type>();\n    });\n    arr = std::move(ret);\n}\n\ntemplate < typename BasicJsonType, typename ConstructibleArrayType,\n           enable_if_t <\n               is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value&&\n               !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value&&\n               !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value&&\n               !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value&&\n               !is_basic_json<ConstructibleArrayType>::value,\n               int > = 0 >\nauto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)\n-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}),\nj.template get<typename ConstructibleArrayType::value_type>(),\nvoid())\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n\n    from_json_array_impl(j, arr, priority_tag<3> {});\n}\n\ntemplate < typename BasicJsonType, typename T, std::size_t... Idx >\nstd::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,\n        identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)\n{\n    return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } };\n}\n\ntemplate < typename BasicJsonType, typename T, std::size_t N >\nauto from_json(BasicJsonType&& j, identity_tag<std::array<T, N>> tag)\n-> decltype(from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {}))\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n\n    return from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {});\n}\n\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_binary()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be binary, but is \", j.type_name()), &j));\n    }\n\n    bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();\n}\n\ntemplate<typename BasicJsonType, typename ConstructibleObjectType,\n         enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>\ninline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_object()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be object, but is \", j.type_name()), &j));\n    }\n\n    ConstructibleObjectType ret;\n    const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();\n    using value_type = typename ConstructibleObjectType::value_type;\n    std::transform(\n        inner_object->begin(), inner_object->end(),\n        std::inserter(ret, ret.begin()),\n        [](typename BasicJsonType::object_t::value_type const & p)\n    {\n        return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());\n    });\n    obj = std::move(ret);\n}\n\n// overload for arithmetic types, not chosen for basic_json template arguments\n// (BooleanType, etc..); note: Is it really necessary to provide explicit\n// overloads for boolean_t etc. in case of a custom BooleanType which is not\n// an arithmetic type?\ntemplate < typename BasicJsonType, typename ArithmeticType,\n           enable_if_t <\n               std::is_arithmetic<ArithmeticType>::value&&\n               !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value&&\n               !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value&&\n               !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value&&\n               !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,\n               int > = 0 >\ninline void from_json(const BasicJsonType& j, ArithmeticType& val)\n{\n    switch (static_cast<value_t>(j))\n    {\n        case value_t::number_unsigned:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());\n            break;\n        }\n        case value_t::number_integer:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());\n            break;\n        }\n        case value_t::number_float:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());\n            break;\n        }\n        case value_t::boolean:\n        {\n            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::boolean_t*>());\n            break;\n        }\n\n        case value_t::null:\n        case value_t::object:\n        case value_t::array:\n        case value_t::string:\n        case value_t::binary:\n        case value_t::discarded:\n        default:\n            JSON_THROW(type_error::create(302, concat(\"type must be number, but is \", j.type_name()), &j));\n    }\n}\n\ntemplate<typename BasicJsonType, typename... Args, std::size_t... Idx>\nstd::tuple<Args...> from_json_tuple_impl_base(BasicJsonType&& j, index_sequence<Idx...> /*unused*/)\n{\n    return std::make_tuple(std::forward<BasicJsonType>(j).at(Idx).template get<Args>()...);\n}\n\ntemplate < typename BasicJsonType, class A1, class A2 >\nstd::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/)\n{\n    return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),\n            std::forward<BasicJsonType>(j).at(1).template get<A2>()};\n}\n\ntemplate<typename BasicJsonType, typename A1, typename A2>\ninline void from_json_tuple_impl(BasicJsonType&& j, std::pair<A1, A2>& p, priority_tag<1> /*unused*/)\n{\n    p = from_json_tuple_impl(std::forward<BasicJsonType>(j), identity_tag<std::pair<A1, A2>> {}, priority_tag<0> {});\n}\n\ntemplate<typename BasicJsonType, typename... Args>\nstd::tuple<Args...> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::tuple<Args...>> /*unused*/, priority_tag<2> /*unused*/)\n{\n    return from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});\n}\n\ntemplate<typename BasicJsonType, typename... Args>\ninline void from_json_tuple_impl(BasicJsonType&& j, std::tuple<Args...>& t, priority_tag<3> /*unused*/)\n{\n    t = from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});\n}\n\ntemplate<typename BasicJsonType, typename TupleRelated>\nauto from_json(BasicJsonType&& j, TupleRelated&& t)\n-> decltype(from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {}))\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n\n    return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {});\n}\n\ntemplate < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator,\n           typename = enable_if_t < !std::is_constructible <\n                                        typename BasicJsonType::string_t, Key >::value >>\ninline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n    m.clear();\n    for (const auto& p : j)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!p.is_array()))\n        {\n            JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", p.type_name()), &j));\n        }\n        m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());\n    }\n}\n\ntemplate < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator,\n           typename = enable_if_t < !std::is_constructible <\n                                        typename BasicJsonType::string_t, Key >::value >>\ninline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_array()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", j.type_name()), &j));\n    }\n    m.clear();\n    for (const auto& p : j)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!p.is_array()))\n        {\n            JSON_THROW(type_error::create(302, concat(\"type must be array, but is \", p.type_name()), &j));\n        }\n        m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());\n    }\n}\n\n#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, std_fs::path& p)\n{\n    if (JSON_HEDLEY_UNLIKELY(!j.is_string()))\n    {\n        JSON_THROW(type_error::create(302, concat(\"type must be string, but is \", j.type_name()), &j));\n    }\n    p = *j.template get_ptr<const typename BasicJsonType::string_t*>();\n}\n#endif\n\nstruct from_json_fn\n{\n    template<typename BasicJsonType, typename T>\n    auto operator()(const BasicJsonType& j, T&& val) const\n    noexcept(noexcept(from_json(j, std::forward<T>(val))))\n    -> decltype(from_json(j, std::forward<T>(val)))\n    {\n        return from_json(j, std::forward<T>(val));\n    }\n};\n\n}  // namespace detail\n\n#ifndef JSON_HAS_CPP_17\n/// namespace to hold default `from_json` function\n/// to see why this is required:\n/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html\nnamespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)\n{\n#endif\nJSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers)\n    detail::static_const<detail::from_json_fn>::value;\n#ifndef JSON_HAS_CPP_17\n}  // namespace\n#endif\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/conversions/to_json.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // copy\n#include <iterator> // begin, end\n#include <string> // string\n#include <tuple> // tuple, get\n#include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type\n#include <utility> // move, forward, declval, pair\n#include <valarray> // valarray\n#include <vector> // vector\n\n// #include <nlohmann/detail/iterators/iteration_proxy.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef> // size_t\n#include <iterator> // input_iterator_tag\n#include <string> // string, to_string\n#include <tuple> // tuple_size, get, tuple_element\n#include <utility> // move\n\n#if JSON_HAS_RANGES\n    #include <ranges> // enable_borrowed_range\n#endif\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename string_type>\nvoid int_to_string( string_type& target, std::size_t value )\n{\n    // For ADL\n    using std::to_string;\n    target = to_string(value);\n}\ntemplate<typename IteratorType> class iteration_proxy_value\n{\n  public:\n    using difference_type = std::ptrdiff_t;\n    using value_type = iteration_proxy_value;\n    using pointer = value_type *;\n    using reference = value_type &;\n    using iterator_category = std::input_iterator_tag;\n    using string_type = typename std::remove_cv< typename std::remove_reference<decltype( std::declval<IteratorType>().key() ) >::type >::type;\n\n  private:\n    /// the iterator\n    IteratorType anchor{};\n    /// an index for arrays (used to create key names)\n    std::size_t array_index = 0;\n    /// last stringified array index\n    mutable std::size_t array_index_last = 0;\n    /// a string representation of the array index\n    mutable string_type array_index_str = \"0\";\n    /// an empty string (to return a reference for primitive values)\n    string_type empty_str{};\n\n  public:\n    explicit iteration_proxy_value() = default;\n    explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0)\n    noexcept(std::is_nothrow_move_constructible<IteratorType>::value\n             && std::is_nothrow_default_constructible<string_type>::value)\n        : anchor(std::move(it))\n        , array_index(array_index_)\n    {}\n\n    iteration_proxy_value(iteration_proxy_value const&) = default;\n    iteration_proxy_value& operator=(iteration_proxy_value const&) = default;\n    // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions\n    iteration_proxy_value(iteration_proxy_value&&)\n    noexcept(std::is_nothrow_move_constructible<IteratorType>::value\n             && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)\n    iteration_proxy_value& operator=(iteration_proxy_value&&)\n    noexcept(std::is_nothrow_move_assignable<IteratorType>::value\n             && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)\n    ~iteration_proxy_value() = default;\n\n    /// dereference operator (needed for range-based for)\n    const iteration_proxy_value& operator*() const\n    {\n        return *this;\n    }\n\n    /// increment operator (needed for range-based for)\n    iteration_proxy_value& operator++()\n    {\n        ++anchor;\n        ++array_index;\n\n        return *this;\n    }\n\n    iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp)\n    {\n        auto tmp = iteration_proxy_value(anchor, array_index);\n        ++anchor;\n        ++array_index;\n        return tmp;\n    }\n\n    /// equality operator (needed for InputIterator)\n    bool operator==(const iteration_proxy_value& o) const\n    {\n        return anchor == o.anchor;\n    }\n\n    /// inequality operator (needed for range-based for)\n    bool operator!=(const iteration_proxy_value& o) const\n    {\n        return anchor != o.anchor;\n    }\n\n    /// return key of the iterator\n    const string_type& key() const\n    {\n        JSON_ASSERT(anchor.m_object != nullptr);\n\n        switch (anchor.m_object->type())\n        {\n            // use integer array index as key\n            case value_t::array:\n            {\n                if (array_index != array_index_last)\n                {\n                    int_to_string( array_index_str, array_index );\n                    array_index_last = array_index;\n                }\n                return array_index_str;\n            }\n\n            // use key from the object\n            case value_t::object:\n                return anchor.key();\n\n            // use an empty key for all primitive types\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                return empty_str;\n        }\n    }\n\n    /// return value of the iterator\n    typename IteratorType::reference value() const\n    {\n        return anchor.value();\n    }\n};\n\n/// proxy class for the items() function\ntemplate<typename IteratorType> class iteration_proxy\n{\n  private:\n    /// the container to iterate\n    typename IteratorType::pointer container = nullptr;\n\n  public:\n    explicit iteration_proxy() = default;\n\n    /// construct iteration proxy from a container\n    explicit iteration_proxy(typename IteratorType::reference cont) noexcept\n        : container(&cont) {}\n\n    iteration_proxy(iteration_proxy const&) = default;\n    iteration_proxy& operator=(iteration_proxy const&) = default;\n    iteration_proxy(iteration_proxy&&) noexcept = default;\n    iteration_proxy& operator=(iteration_proxy&&) noexcept = default;\n    ~iteration_proxy() = default;\n\n    /// return iterator begin (needed for range-based for)\n    iteration_proxy_value<IteratorType> begin() const noexcept\n    {\n        return iteration_proxy_value<IteratorType>(container->begin());\n    }\n\n    /// return iterator end (needed for range-based for)\n    iteration_proxy_value<IteratorType> end() const noexcept\n    {\n        return iteration_proxy_value<IteratorType>(container->end());\n    }\n};\n\n// Structured Bindings Support\n// For further reference see https://blog.tartanllama.xyz/structured-bindings/\n// And see https://github.com/nlohmann/json/pull/1391\ntemplate<std::size_t N, typename IteratorType, enable_if_t<N == 0, int> = 0>\nauto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.key())\n{\n    return i.key();\n}\n// Structured Bindings Support\n// For further reference see https://blog.tartanllama.xyz/structured-bindings/\n// And see https://github.com/nlohmann/json/pull/1391\ntemplate<std::size_t N, typename IteratorType, enable_if_t<N == 1, int> = 0>\nauto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.value())\n{\n    return i.value();\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// The Addition to the STD Namespace is required to add\n// Structured Bindings Support to the iteration_proxy_value class\n// For further reference see https://blog.tartanllama.xyz/structured-bindings/\n// And see https://github.com/nlohmann/json/pull/1391\nnamespace std\n{\n\n#if defined(__clang__)\n    // Fix: https://github.com/nlohmann/json/issues/1401\n    #pragma clang diagnostic push\n    #pragma clang diagnostic ignored \"-Wmismatched-tags\"\n#endif\ntemplate<typename IteratorType>\nclass tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)\n            : public std::integral_constant<std::size_t, 2> {};\n\ntemplate<std::size_t N, typename IteratorType>\nclass tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >> // NOLINT(cert-dcl58-cpp)\n{\n  public:\n    using type = decltype(\n                     get<N>(std::declval <\n                            ::nlohmann::detail::iteration_proxy_value<IteratorType >> ()));\n};\n#if defined(__clang__)\n    #pragma clang diagnostic pop\n#endif\n\n}  // namespace std\n\n#if JSON_HAS_RANGES\n    template <typename IteratorType>\n    inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy<IteratorType>> = true;\n#endif\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/std_fs.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n//////////////////\n// constructors //\n//////////////////\n\n/*\n * Note all external_constructor<>::construct functions need to call\n * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an\n * allocated value (e.g., a string). See bug issue\n * https://github.com/nlohmann/json/issues/2865 for more information.\n */\n\ntemplate<value_t> struct external_constructor;\n\ntemplate<>\nstruct external_constructor<value_t::boolean>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::boolean;\n        j.m_data.m_value = b;\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::string>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::string;\n        j.m_data.m_value = s;\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::string;\n        j.m_data.m_value = std::move(s);\n        j.assert_invariant();\n    }\n\n    template < typename BasicJsonType, typename CompatibleStringType,\n               enable_if_t < !std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value,\n                             int > = 0 >\n    static void construct(BasicJsonType& j, const CompatibleStringType& str)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::string;\n        j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str);\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::binary>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::binary;\n        j.m_data.m_value = typename BasicJsonType::binary_t(b);\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::binary;\n        j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b));\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::number_float>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::number_float;\n        j.m_data.m_value = val;\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::number_unsigned>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::number_unsigned;\n        j.m_data.m_value = val;\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::number_integer>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::number_integer;\n        j.m_data.m_value = val;\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::array>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::array;\n        j.m_data.m_value = arr;\n        j.set_parents();\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::array;\n        j.m_data.m_value = std::move(arr);\n        j.set_parents();\n        j.assert_invariant();\n    }\n\n    template < typename BasicJsonType, typename CompatibleArrayType,\n               enable_if_t < !std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value,\n                             int > = 0 >\n    static void construct(BasicJsonType& j, const CompatibleArrayType& arr)\n    {\n        using std::begin;\n        using std::end;\n\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::array;\n        j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));\n        j.set_parents();\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, const std::vector<bool>& arr)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::array;\n        j.m_data.m_value = value_t::array;\n        j.m_data.m_value.array->reserve(arr.size());\n        for (const bool x : arr)\n        {\n            j.m_data.m_value.array->push_back(x);\n            j.set_parent(j.m_data.m_value.array->back());\n        }\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType, typename T,\n             enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>\n    static void construct(BasicJsonType& j, const std::valarray<T>& arr)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::array;\n        j.m_data.m_value = value_t::array;\n        j.m_data.m_value.array->resize(arr.size());\n        if (arr.size() > 0)\n        {\n            std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin());\n        }\n        j.set_parents();\n        j.assert_invariant();\n    }\n};\n\ntemplate<>\nstruct external_constructor<value_t::object>\n{\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::object;\n        j.m_data.m_value = obj;\n        j.set_parents();\n        j.assert_invariant();\n    }\n\n    template<typename BasicJsonType>\n    static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj)\n    {\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::object;\n        j.m_data.m_value = std::move(obj);\n        j.set_parents();\n        j.assert_invariant();\n    }\n\n    template < typename BasicJsonType, typename CompatibleObjectType,\n               enable_if_t < !std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int > = 0 >\n    static void construct(BasicJsonType& j, const CompatibleObjectType& obj)\n    {\n        using std::begin;\n        using std::end;\n\n        j.m_data.m_value.destroy(j.m_data.m_type);\n        j.m_data.m_type = value_t::object;\n        j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));\n        j.set_parents();\n        j.assert_invariant();\n    }\n};\n\n/////////////\n// to_json //\n/////////////\n\ntemplate<typename BasicJsonType, typename T,\n         enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value, int> = 0>\ninline void to_json(BasicJsonType& j, T b) noexcept\n{\n    external_constructor<value_t::boolean>::construct(j, b);\n}\n\ntemplate < typename BasicJsonType, typename BoolRef,\n           enable_if_t <\n               ((std::is_same<std::vector<bool>::reference, BoolRef>::value\n                 && !std::is_same <std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value)\n                || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value\n                    && !std::is_same <detail::uncvref_t<std::vector<bool>::const_reference>,\n                                      typename BasicJsonType::boolean_t >::value))\n               && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int > = 0 >\ninline void to_json(BasicJsonType& j, const BoolRef& b) noexcept\n{\n    external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));\n}\n\ntemplate<typename BasicJsonType, typename CompatibleString,\n         enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>\ninline void to_json(BasicJsonType& j, const CompatibleString& s)\n{\n    external_constructor<value_t::string>::construct(j, s);\n}\n\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)\n{\n    external_constructor<value_t::string>::construct(j, std::move(s));\n}\n\ntemplate<typename BasicJsonType, typename FloatType,\n         enable_if_t<std::is_floating_point<FloatType>::value, int> = 0>\ninline void to_json(BasicJsonType& j, FloatType val) noexcept\n{\n    external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));\n}\n\ntemplate<typename BasicJsonType, typename CompatibleNumberUnsignedType,\n         enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>\ninline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept\n{\n    external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));\n}\n\ntemplate<typename BasicJsonType, typename CompatibleNumberIntegerType,\n         enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>\ninline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept\n{\n    external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));\n}\n\n#if !JSON_DISABLE_ENUM_SERIALIZATION\ntemplate<typename BasicJsonType, typename EnumType,\n         enable_if_t<std::is_enum<EnumType>::value, int> = 0>\ninline void to_json(BasicJsonType& j, EnumType e) noexcept\n{\n    using underlying_type = typename std::underlying_type<EnumType>::type;\n    static constexpr value_t integral_value_t = std::is_unsigned<underlying_type>::value ? value_t::number_unsigned : value_t::number_integer;\n    external_constructor<integral_value_t>::construct(j, static_cast<underlying_type>(e));\n}\n#endif  // JSON_DISABLE_ENUM_SERIALIZATION\n\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const std::vector<bool>& e)\n{\n    external_constructor<value_t::array>::construct(j, e);\n}\n\ntemplate < typename BasicJsonType, typename CompatibleArrayType,\n           enable_if_t < is_compatible_array_type<BasicJsonType,\n                         CompatibleArrayType>::value&&\n                         !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&&\n                         !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value&&\n                         !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&&\n                         !is_basic_json<CompatibleArrayType>::value,\n                         int > = 0 >\ninline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)\n{\n    external_constructor<value_t::array>::construct(j, arr);\n}\n\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin)\n{\n    external_constructor<value_t::binary>::construct(j, bin);\n}\n\ntemplate<typename BasicJsonType, typename T,\n         enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>\ninline void to_json(BasicJsonType& j, const std::valarray<T>& arr)\n{\n    external_constructor<value_t::array>::construct(j, std::move(arr));\n}\n\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)\n{\n    external_constructor<value_t::array>::construct(j, std::move(arr));\n}\n\ntemplate < typename BasicJsonType, typename CompatibleObjectType,\n           enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value, int > = 0 >\ninline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)\n{\n    external_constructor<value_t::object>::construct(j, obj);\n}\n\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)\n{\n    external_constructor<value_t::object>::construct(j, std::move(obj));\n}\n\ntemplate <\n    typename BasicJsonType, typename T, std::size_t N,\n    enable_if_t < !std::is_constructible<typename BasicJsonType::string_t,\n                  const T(&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n                  int > = 0 >\ninline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n{\n    external_constructor<value_t::array>::construct(j, arr);\n}\n\ntemplate < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >\ninline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)\n{\n    j = { p.first, p.second };\n}\n\n// for https://github.com/nlohmann/json/pull/1134\ntemplate<typename BasicJsonType, typename T,\n         enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value, int> = 0>\ninline void to_json(BasicJsonType& j, const T& b)\n{\n    j = { {b.key(), b.value()} };\n}\n\ntemplate<typename BasicJsonType, typename Tuple, std::size_t... Idx>\ninline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...> /*unused*/)\n{\n    j = { std::get<Idx>(t)... };\n}\n\ntemplate<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value, int > = 0>\ninline void to_json(BasicJsonType& j, const T& t)\n{\n    to_json_tuple_impl(j, t, make_index_sequence<std::tuple_size<T>::value> {});\n}\n\n#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM\ntemplate<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const std_fs::path& p)\n{\n    j = p.string();\n}\n#endif\n\nstruct to_json_fn\n{\n    template<typename BasicJsonType, typename T>\n    auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))\n    -> decltype(to_json(j, std::forward<T>(val)), void())\n    {\n        return to_json(j, std::forward<T>(val));\n    }\n};\n}  // namespace detail\n\n#ifndef JSON_HAS_CPP_17\n/// namespace to hold default `to_json` function\n/// to see why this is required:\n/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html\nnamespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)\n{\n#endif\nJSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers)\n    detail::static_const<detail::to_json_fn>::value;\n#ifndef JSON_HAS_CPP_17\n}  // namespace\n#endif\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/identity_tag.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/// @sa https://json.nlohmann.me/api/adl_serializer/\ntemplate<typename ValueType, typename>\nstruct adl_serializer\n{\n    /// @brief convert a JSON value to any value type\n    /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/\n    template<typename BasicJsonType, typename TargetType = ValueType>\n    static auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n        noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n    -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n    {\n        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);\n    }\n\n    /// @brief convert a JSON value to any value type\n    /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/\n    template<typename BasicJsonType, typename TargetType = ValueType>\n    static auto from_json(BasicJsonType && j) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n    -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n    {\n        return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {});\n    }\n\n    /// @brief convert any value type to a JSON value\n    /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/\n    template<typename BasicJsonType, typename TargetType = ValueType>\n    static auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n        noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n    -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n    {\n        ::nlohmann::to_json(j, std::forward<TargetType>(val));\n    }\n};\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/byte_container_with_subtype.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstdint> // uint8_t, uint64_t\n#include <tuple> // tie\n#include <utility> // move\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/// @brief an internal type for a backed binary type\n/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/\ntemplate<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType\n{\n  public:\n    using container_type = BinaryType;\n    using subtype_type = std::uint64_t;\n\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/\n    byte_container_with_subtype() noexcept(noexcept(container_type()))\n        : container_type()\n    {}\n\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/\n    byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b)))\n        : container_type(b)\n    {}\n\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/\n    byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b))))\n        : container_type(std::move(b))\n    {}\n\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/\n    byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b)))\n        : container_type(b)\n        , m_subtype(subtype_)\n        , m_has_subtype(true)\n    {}\n\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/\n    byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b))))\n        : container_type(std::move(b))\n        , m_subtype(subtype_)\n        , m_has_subtype(true)\n    {}\n\n    bool operator==(const byte_container_with_subtype& rhs) const\n    {\n        return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) ==\n               std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype);\n    }\n\n    bool operator!=(const byte_container_with_subtype& rhs) const\n    {\n        return !(rhs == *this);\n    }\n\n    /// @brief sets the binary subtype\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/\n    void set_subtype(subtype_type subtype_) noexcept\n    {\n        m_subtype = subtype_;\n        m_has_subtype = true;\n    }\n\n    /// @brief return the binary subtype\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/\n    constexpr subtype_type subtype() const noexcept\n    {\n        return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1);\n    }\n\n    /// @brief return whether the value has a subtype\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/\n    constexpr bool has_subtype() const noexcept\n    {\n        return m_has_subtype;\n    }\n\n    /// @brief clears the binary subtype\n    /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/\n    void clear_subtype() noexcept\n    {\n        m_subtype = 0;\n        m_has_subtype = false;\n    }\n\n  private:\n    subtype_type m_subtype = 0;\n    bool m_has_subtype = false;\n};\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/conversions/from_json.hpp>\n\n// #include <nlohmann/detail/conversions/to_json.hpp>\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/hash.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstdint> // uint8_t\n#include <cstddef> // size_t\n#include <functional> // hash\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n// boost::hash_combine\ninline std::size_t combine(std::size_t seed, std::size_t h) noexcept\n{\n    seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U);\n    return seed;\n}\n\n/*!\n@brief hash a JSON value\n\nThe hash function tries to rely on std::hash where possible. Furthermore, the\ntype of the JSON value is taken into account to have different hash values for\nnull, 0, 0U, and false, etc.\n\n@tparam BasicJsonType basic_json specialization\n@param j JSON value to hash\n@return hash value of j\n*/\ntemplate<typename BasicJsonType>\nstd::size_t hash(const BasicJsonType& j)\n{\n    using string_t = typename BasicJsonType::string_t;\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n\n    const auto type = static_cast<std::size_t>(j.type());\n    switch (j.type())\n    {\n        case BasicJsonType::value_t::null:\n        case BasicJsonType::value_t::discarded:\n        {\n            return combine(type, 0);\n        }\n\n        case BasicJsonType::value_t::object:\n        {\n            auto seed = combine(type, j.size());\n            for (const auto& element : j.items())\n            {\n                const auto h = std::hash<string_t> {}(element.key());\n                seed = combine(seed, h);\n                seed = combine(seed, hash(element.value()));\n            }\n            return seed;\n        }\n\n        case BasicJsonType::value_t::array:\n        {\n            auto seed = combine(type, j.size());\n            for (const auto& element : j)\n            {\n                seed = combine(seed, hash(element));\n            }\n            return seed;\n        }\n\n        case BasicJsonType::value_t::string:\n        {\n            const auto h = std::hash<string_t> {}(j.template get_ref<const string_t&>());\n            return combine(type, h);\n        }\n\n        case BasicJsonType::value_t::boolean:\n        {\n            const auto h = std::hash<bool> {}(j.template get<bool>());\n            return combine(type, h);\n        }\n\n        case BasicJsonType::value_t::number_integer:\n        {\n            const auto h = std::hash<number_integer_t> {}(j.template get<number_integer_t>());\n            return combine(type, h);\n        }\n\n        case BasicJsonType::value_t::number_unsigned:\n        {\n            const auto h = std::hash<number_unsigned_t> {}(j.template get<number_unsigned_t>());\n            return combine(type, h);\n        }\n\n        case BasicJsonType::value_t::number_float:\n        {\n            const auto h = std::hash<number_float_t> {}(j.template get<number_float_t>());\n            return combine(type, h);\n        }\n\n        case BasicJsonType::value_t::binary:\n        {\n            auto seed = combine(type, j.get_binary().size());\n            const auto h = std::hash<bool> {}(j.get_binary().has_subtype());\n            seed = combine(seed, h);\n            seed = combine(seed, static_cast<std::size_t>(j.get_binary().subtype()));\n            for (const auto byte : j.get_binary())\n            {\n                seed = combine(seed, std::hash<std::uint8_t> {}(byte));\n            }\n            return seed;\n        }\n\n        default:                   // LCOV_EXCL_LINE\n            JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n            return 0;              // LCOV_EXCL_LINE\n    }\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/input/binary_reader.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // generate_n\n#include <array> // array\n#include <cmath> // ldexp\n#include <cstddef> // size_t\n#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t\n#include <cstdio> // snprintf\n#include <cstring> // memcpy\n#include <iterator> // back_inserter\n#include <limits> // numeric_limits\n#include <string> // char_traits, string\n#include <utility> // make_pair, move\n#include <vector> // vector\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/input/input_adapters.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <array> // array\n#include <cstddef> // size_t\n#include <cstring> // strlen\n#include <iterator> // begin, end, iterator_traits, random_access_iterator_tag, distance, next\n#include <memory> // shared_ptr, make_shared, addressof\n#include <numeric> // accumulate\n#include <string> // string, char_traits\n#include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer\n#include <utility> // pair, declval\n\n#ifndef JSON_NO_IO\n    #include <cstdio>   // FILE *\n    #include <istream>  // istream\n#endif                  // JSON_NO_IO\n\n// #include <nlohmann/detail/iterators/iterator_traits.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/// the supported input formats\nenum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata };\n\n////////////////////\n// input adapters //\n////////////////////\n\n#ifndef JSON_NO_IO\n/*!\nInput adapter for stdio file access. This adapter read only 1 byte and do not use any\n buffer. This adapter is a very low level adapter.\n*/\nclass file_input_adapter\n{\n  public:\n    using char_type = char;\n\n    JSON_HEDLEY_NON_NULL(2)\n    explicit file_input_adapter(std::FILE* f) noexcept\n        : m_file(f)\n    {\n        JSON_ASSERT(m_file != nullptr);\n    }\n\n    // make class move-only\n    file_input_adapter(const file_input_adapter&) = delete;\n    file_input_adapter(file_input_adapter&&) noexcept = default;\n    file_input_adapter& operator=(const file_input_adapter&) = delete;\n    file_input_adapter& operator=(file_input_adapter&&) = delete;\n    ~file_input_adapter() = default;\n\n    std::char_traits<char>::int_type get_character() noexcept\n    {\n        return std::fgetc(m_file);\n    }\n\n  private:\n    /// the file pointer to read from\n    std::FILE* m_file;\n};\n\n/*!\nInput adapter for a (caching) istream. Ignores a UFT Byte Order Mark at\nbeginning of input. Does not support changing the underlying std::streambuf\nin mid-input. Maintains underlying std::istream and std::streambuf to support\nsubsequent use of standard std::istream operations to process any input\ncharacters following those used in parsing the JSON input.  Clears the\nstd::istream flags; any input errors (e.g., EOF) will be detected by the first\nsubsequent call for input from the std::istream.\n*/\nclass input_stream_adapter\n{\n  public:\n    using char_type = char;\n\n    ~input_stream_adapter()\n    {\n        // clear stream flags; we use underlying streambuf I/O, do not\n        // maintain ifstream flags, except eof\n        if (is != nullptr)\n        {\n            is->clear(is->rdstate() & std::ios::eofbit);\n        }\n    }\n\n    explicit input_stream_adapter(std::istream& i)\n        : is(&i), sb(i.rdbuf())\n    {}\n\n    // delete because of pointer members\n    input_stream_adapter(const input_stream_adapter&) = delete;\n    input_stream_adapter& operator=(input_stream_adapter&) = delete;\n    input_stream_adapter& operator=(input_stream_adapter&&) = delete;\n\n    input_stream_adapter(input_stream_adapter&& rhs) noexcept\n        : is(rhs.is), sb(rhs.sb)\n    {\n        rhs.is = nullptr;\n        rhs.sb = nullptr;\n    }\n\n    // std::istream/std::streambuf use std::char_traits<char>::to_int_type, to\n    // ensure that std::char_traits<char>::eof() and the character 0xFF do not\n    // end up as the same value, e.g. 0xFFFFFFFF.\n    std::char_traits<char>::int_type get_character()\n    {\n        auto res = sb->sbumpc();\n        // set eof manually, as we don't use the istream interface.\n        if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof()))\n        {\n            is->clear(is->rdstate() | std::ios::eofbit);\n        }\n        return res;\n    }\n\n  private:\n    /// the associated input stream\n    std::istream* is = nullptr;\n    std::streambuf* sb = nullptr;\n};\n#endif  // JSON_NO_IO\n\n// General-purpose iterator-based adapter. It might not be as fast as\n// theoretically possible for some containers, but it is extremely versatile.\ntemplate<typename IteratorType>\nclass iterator_input_adapter\n{\n  public:\n    using char_type = typename std::iterator_traits<IteratorType>::value_type;\n\n    iterator_input_adapter(IteratorType first, IteratorType last)\n        : current(std::move(first)), end(std::move(last))\n    {}\n\n    typename char_traits<char_type>::int_type get_character()\n    {\n        if (JSON_HEDLEY_LIKELY(current != end))\n        {\n            auto result = char_traits<char_type>::to_int_type(*current);\n            std::advance(current, 1);\n            return result;\n        }\n\n        return char_traits<char_type>::eof();\n    }\n\n  private:\n    IteratorType current;\n    IteratorType end;\n\n    template<typename BaseInputAdapter, size_t T>\n    friend struct wide_string_input_helper;\n\n    bool empty() const\n    {\n        return current == end;\n    }\n};\n\ntemplate<typename BaseInputAdapter, size_t T>\nstruct wide_string_input_helper;\n\ntemplate<typename BaseInputAdapter>\nstruct wide_string_input_helper<BaseInputAdapter, 4>\n{\n    // UTF-32\n    static void fill_buffer(BaseInputAdapter& input,\n                            std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,\n                            size_t& utf8_bytes_index,\n                            size_t& utf8_bytes_filled)\n    {\n        utf8_bytes_index = 0;\n\n        if (JSON_HEDLEY_UNLIKELY(input.empty()))\n        {\n            utf8_bytes[0] = std::char_traits<char>::eof();\n            utf8_bytes_filled = 1;\n        }\n        else\n        {\n            // get the current character\n            const auto wc = input.get_character();\n\n            // UTF-32 to UTF-8 encoding\n            if (wc < 0x80)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);\n                utf8_bytes_filled = 1;\n            }\n            else if (wc <= 0x7FF)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u) & 0x1Fu));\n                utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));\n                utf8_bytes_filled = 2;\n            }\n            else if (wc <= 0xFFFF)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u) & 0x0Fu));\n                utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));\n                utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));\n                utf8_bytes_filled = 3;\n            }\n            else if (wc <= 0x10FFFF)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | ((static_cast<unsigned int>(wc) >> 18u) & 0x07u));\n                utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 12u) & 0x3Fu));\n                utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));\n                utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));\n                utf8_bytes_filled = 4;\n            }\n            else\n            {\n                // unknown character\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);\n                utf8_bytes_filled = 1;\n            }\n        }\n    }\n};\n\ntemplate<typename BaseInputAdapter>\nstruct wide_string_input_helper<BaseInputAdapter, 2>\n{\n    // UTF-16\n    static void fill_buffer(BaseInputAdapter& input,\n                            std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,\n                            size_t& utf8_bytes_index,\n                            size_t& utf8_bytes_filled)\n    {\n        utf8_bytes_index = 0;\n\n        if (JSON_HEDLEY_UNLIKELY(input.empty()))\n        {\n            utf8_bytes[0] = std::char_traits<char>::eof();\n            utf8_bytes_filled = 1;\n        }\n        else\n        {\n            // get the current character\n            const auto wc = input.get_character();\n\n            // UTF-16 to UTF-8 encoding\n            if (wc < 0x80)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);\n                utf8_bytes_filled = 1;\n            }\n            else if (wc <= 0x7FF)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xC0u | ((static_cast<unsigned int>(wc) >> 6u)));\n                utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));\n                utf8_bytes_filled = 2;\n            }\n            else if (0xD800 > wc || wc >= 0xE000)\n            {\n                utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xE0u | ((static_cast<unsigned int>(wc) >> 12u)));\n                utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((static_cast<unsigned int>(wc) >> 6u) & 0x3Fu));\n                utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | (static_cast<unsigned int>(wc) & 0x3Fu));\n                utf8_bytes_filled = 3;\n            }\n            else\n            {\n                if (JSON_HEDLEY_UNLIKELY(!input.empty()))\n                {\n                    const auto wc2 = static_cast<unsigned int>(input.get_character());\n                    const auto charcode = 0x10000u + (((static_cast<unsigned int>(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu));\n                    utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(0xF0u | (charcode >> 18u));\n                    utf8_bytes[1] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu));\n                    utf8_bytes[2] = static_cast<std::char_traits<char>::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu));\n                    utf8_bytes[3] = static_cast<std::char_traits<char>::int_type>(0x80u | (charcode & 0x3Fu));\n                    utf8_bytes_filled = 4;\n                }\n                else\n                {\n                    utf8_bytes[0] = static_cast<std::char_traits<char>::int_type>(wc);\n                    utf8_bytes_filled = 1;\n                }\n            }\n        }\n    }\n};\n\n// Wraps another input adapter to convert wide character types into individual bytes.\ntemplate<typename BaseInputAdapter, typename WideCharType>\nclass wide_string_input_adapter\n{\n  public:\n    using char_type = char;\n\n    wide_string_input_adapter(BaseInputAdapter base)\n        : base_adapter(base) {}\n\n    typename std::char_traits<char>::int_type get_character() noexcept\n    {\n        // check if buffer needs to be filled\n        if (utf8_bytes_index == utf8_bytes_filled)\n        {\n            fill_buffer<sizeof(WideCharType)>();\n\n            JSON_ASSERT(utf8_bytes_filled > 0);\n            JSON_ASSERT(utf8_bytes_index == 0);\n        }\n\n        // use buffer\n        JSON_ASSERT(utf8_bytes_filled > 0);\n        JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled);\n        return utf8_bytes[utf8_bytes_index++];\n    }\n\n  private:\n    BaseInputAdapter base_adapter;\n\n    template<size_t T>\n    void fill_buffer()\n    {\n        wide_string_input_helper<BaseInputAdapter, T>::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled);\n    }\n\n    /// a buffer for UTF-8 bytes\n    std::array<std::char_traits<char>::int_type, 4> utf8_bytes = {{0, 0, 0, 0}};\n\n    /// index to the utf8_codes array for the next valid byte\n    std::size_t utf8_bytes_index = 0;\n    /// number of valid bytes in the utf8_codes array\n    std::size_t utf8_bytes_filled = 0;\n};\n\ntemplate<typename IteratorType, typename Enable = void>\nstruct iterator_input_adapter_factory\n{\n    using iterator_type = IteratorType;\n    using char_type = typename std::iterator_traits<iterator_type>::value_type;\n    using adapter_type = iterator_input_adapter<iterator_type>;\n\n    static adapter_type create(IteratorType first, IteratorType last)\n    {\n        return adapter_type(std::move(first), std::move(last));\n    }\n};\n\ntemplate<typename T>\nstruct is_iterator_of_multibyte\n{\n    using value_type = typename std::iterator_traits<T>::value_type;\n    enum\n    {\n        value = sizeof(value_type) > 1\n    };\n};\n\ntemplate<typename IteratorType>\nstruct iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>>\n{\n    using iterator_type = IteratorType;\n    using char_type = typename std::iterator_traits<iterator_type>::value_type;\n    using base_adapter_type = iterator_input_adapter<iterator_type>;\n    using adapter_type = wide_string_input_adapter<base_adapter_type, char_type>;\n\n    static adapter_type create(IteratorType first, IteratorType last)\n    {\n        return adapter_type(base_adapter_type(std::move(first), std::move(last)));\n    }\n};\n\n// General purpose iterator-based input\ntemplate<typename IteratorType>\ntypename iterator_input_adapter_factory<IteratorType>::adapter_type input_adapter(IteratorType first, IteratorType last)\n{\n    using factory_type = iterator_input_adapter_factory<IteratorType>;\n    return factory_type::create(first, last);\n}\n\n// Convenience shorthand from container to iterator\n// Enables ADL on begin(container) and end(container)\n// Encloses the using declarations in namespace for not to leak them to outside scope\n\nnamespace container_input_adapter_factory_impl\n{\n\nusing std::begin;\nusing std::end;\n\ntemplate<typename ContainerType, typename Enable = void>\nstruct container_input_adapter_factory {};\n\ntemplate<typename ContainerType>\nstruct container_input_adapter_factory< ContainerType,\n       void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>\n       {\n           using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>())));\n\n           static adapter_type create(const ContainerType& container)\n{\n    return input_adapter(begin(container), end(container));\n}\n       };\n\n}  // namespace container_input_adapter_factory_impl\n\ntemplate<typename ContainerType>\ntypename container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::adapter_type input_adapter(const ContainerType& container)\n{\n    return container_input_adapter_factory_impl::container_input_adapter_factory<ContainerType>::create(container);\n}\n\n#ifndef JSON_NO_IO\n// Special cases with fast paths\ninline file_input_adapter input_adapter(std::FILE* file)\n{\n    return file_input_adapter(file);\n}\n\ninline input_stream_adapter input_adapter(std::istream& stream)\n{\n    return input_stream_adapter(stream);\n}\n\ninline input_stream_adapter input_adapter(std::istream&& stream)\n{\n    return input_stream_adapter(stream);\n}\n#endif  // JSON_NO_IO\n\nusing contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>()));\n\n// Null-delimited strings, and the like.\ntemplate < typename CharT,\n           typename std::enable_if <\n               std::is_pointer<CharT>::value&&\n               !std::is_array<CharT>::value&&\n               std::is_integral<typename std::remove_pointer<CharT>::type>::value&&\n               sizeof(typename std::remove_pointer<CharT>::type) == 1,\n               int >::type = 0 >\ncontiguous_bytes_input_adapter input_adapter(CharT b)\n{\n    auto length = std::strlen(reinterpret_cast<const char*>(b));\n    const auto* ptr = reinterpret_cast<const char*>(b);\n    return input_adapter(ptr, ptr + length);\n}\n\ntemplate<typename T, std::size_t N>\nauto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n{\n    return input_adapter(array, array + N);\n}\n\n// This class only handles inputs of input_buffer_adapter type.\n// It's required so that expressions like {ptr, len} can be implicitly cast\n// to the correct adapter.\nclass span_input_adapter\n{\n  public:\n    template < typename CharT,\n               typename std::enable_if <\n                   std::is_pointer<CharT>::value&&\n                   std::is_integral<typename std::remove_pointer<CharT>::type>::value&&\n                   sizeof(typename std::remove_pointer<CharT>::type) == 1,\n                   int >::type = 0 >\n    span_input_adapter(CharT b, std::size_t l)\n        : ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l) {}\n\n    template<class IteratorType,\n             typename std::enable_if<\n                 std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value,\n                 int>::type = 0>\n    span_input_adapter(IteratorType first, IteratorType last)\n        : ia(input_adapter(first, last)) {}\n\n    contiguous_bytes_input_adapter&& get()\n    {\n        return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg)\n    }\n\n  private:\n    contiguous_bytes_input_adapter ia;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/input/json_sax.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef>\n#include <string> // string\n#include <utility> // move\n#include <vector> // vector\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/*!\n@brief SAX interface\n\nThis class describes the SAX interface used by @ref nlohmann::json::sax_parse.\nEach function is called in different situations while the input is parsed. The\nboolean return value informs the parser whether to continue processing the\ninput.\n*/\ntemplate<typename BasicJsonType>\nstruct json_sax\n{\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n\n    /*!\n    @brief a null value was read\n    @return whether parsing should proceed\n    */\n    virtual bool null() = 0;\n\n    /*!\n    @brief a boolean value was read\n    @param[in] val  boolean value\n    @return whether parsing should proceed\n    */\n    virtual bool boolean(bool val) = 0;\n\n    /*!\n    @brief an integer number was read\n    @param[in] val  integer value\n    @return whether parsing should proceed\n    */\n    virtual bool number_integer(number_integer_t val) = 0;\n\n    /*!\n    @brief an unsigned integer number was read\n    @param[in] val  unsigned integer value\n    @return whether parsing should proceed\n    */\n    virtual bool number_unsigned(number_unsigned_t val) = 0;\n\n    /*!\n    @brief a floating-point number was read\n    @param[in] val  floating-point value\n    @param[in] s    raw token value\n    @return whether parsing should proceed\n    */\n    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n\n    /*!\n    @brief a string value was read\n    @param[in] val  string value\n    @return whether parsing should proceed\n    @note It is safe to move the passed string value.\n    */\n    virtual bool string(string_t& val) = 0;\n\n    /*!\n    @brief a binary value was read\n    @param[in] val  binary value\n    @return whether parsing should proceed\n    @note It is safe to move the passed binary value.\n    */\n    virtual bool binary(binary_t& val) = 0;\n\n    /*!\n    @brief the beginning of an object was read\n    @param[in] elements  number of object elements or -1 if unknown\n    @return whether parsing should proceed\n    @note binary formats may report the number of elements\n    */\n    virtual bool start_object(std::size_t elements) = 0;\n\n    /*!\n    @brief an object key was read\n    @param[in] val  object key\n    @return whether parsing should proceed\n    @note It is safe to move the passed string.\n    */\n    virtual bool key(string_t& val) = 0;\n\n    /*!\n    @brief the end of an object was read\n    @return whether parsing should proceed\n    */\n    virtual bool end_object() = 0;\n\n    /*!\n    @brief the beginning of an array was read\n    @param[in] elements  number of array elements or -1 if unknown\n    @return whether parsing should proceed\n    @note binary formats may report the number of elements\n    */\n    virtual bool start_array(std::size_t elements) = 0;\n\n    /*!\n    @brief the end of an array was read\n    @return whether parsing should proceed\n    */\n    virtual bool end_array() = 0;\n\n    /*!\n    @brief a parse error occurred\n    @param[in] position    the position in the input where the error occurs\n    @param[in] last_token  the last read token\n    @param[in] ex          an exception object describing the error\n    @return whether parsing should proceed (must return false)\n    */\n    virtual bool parse_error(std::size_t position,\n                             const std::string& last_token,\n                             const detail::exception& ex) = 0;\n\n    json_sax() = default;\n    json_sax(const json_sax&) = default;\n    json_sax(json_sax&&) noexcept = default;\n    json_sax& operator=(const json_sax&) = default;\n    json_sax& operator=(json_sax&&) noexcept = default;\n    virtual ~json_sax() = default;\n};\n\nnamespace detail\n{\n/*!\n@brief SAX implementation to create a JSON value from SAX events\n\nThis class implements the @ref json_sax interface and processes the SAX events\nto create a JSON value which makes it basically a DOM parser. The structure or\nhierarchy of the JSON value is managed by the stack `ref_stack` which contains\na pointer to the respective array or object for each recursion depth.\n\nAfter successful parsing, the value that is passed by reference to the\nconstructor contains the parsed value.\n\n@tparam BasicJsonType  the JSON type\n*/\ntemplate<typename BasicJsonType>\nclass json_sax_dom_parser\n{\n  public:\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n\n    /*!\n    @param[in,out] r  reference to a JSON value that is manipulated while\n                       parsing\n    @param[in] allow_exceptions_  whether parse errors yield exceptions\n    */\n    explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true)\n        : root(r), allow_exceptions(allow_exceptions_)\n    {}\n\n    // make class move-only\n    json_sax_dom_parser(const json_sax_dom_parser&) = delete;\n    json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;\n    json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    ~json_sax_dom_parser() = default;\n\n    bool null()\n    {\n        handle_value(nullptr);\n        return true;\n    }\n\n    bool boolean(bool val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_integer(number_integer_t val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& /*unused*/)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool string(string_t& val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool binary(binary_t& val)\n    {\n        handle_value(std::move(val));\n        return true;\n    }\n\n    bool start_object(std::size_t len)\n    {\n        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));\n\n        if (JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))\n        {\n            JSON_THROW(out_of_range::create(408, concat(\"excessive object size: \", std::to_string(len)), ref_stack.back()));\n        }\n\n        return true;\n    }\n\n    bool key(string_t& val)\n    {\n        JSON_ASSERT(!ref_stack.empty());\n        JSON_ASSERT(ref_stack.back()->is_object());\n\n        // add null at given key and store the reference for later\n        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));\n        return true;\n    }\n\n    bool end_object()\n    {\n        JSON_ASSERT(!ref_stack.empty());\n        JSON_ASSERT(ref_stack.back()->is_object());\n\n        ref_stack.back()->set_parents();\n        ref_stack.pop_back();\n        return true;\n    }\n\n    bool start_array(std::size_t len)\n    {\n        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));\n\n        if (JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))\n        {\n            JSON_THROW(out_of_range::create(408, concat(\"excessive array size: \", std::to_string(len)), ref_stack.back()));\n        }\n\n        return true;\n    }\n\n    bool end_array()\n    {\n        JSON_ASSERT(!ref_stack.empty());\n        JSON_ASSERT(ref_stack.back()->is_array());\n\n        ref_stack.back()->set_parents();\n        ref_stack.pop_back();\n        return true;\n    }\n\n    template<class Exception>\n    bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,\n                     const Exception& ex)\n    {\n        errored = true;\n        static_cast<void>(ex);\n        if (allow_exceptions)\n        {\n            JSON_THROW(ex);\n        }\n        return false;\n    }\n\n    constexpr bool is_errored() const\n    {\n        return errored;\n    }\n\n  private:\n    /*!\n    @invariant If the ref stack is empty, then the passed value will be the new\n               root.\n    @invariant If the ref stack contains a value, then it is an array or an\n               object to which we can add elements\n    */\n    template<typename Value>\n    JSON_HEDLEY_RETURNS_NON_NULL\n    BasicJsonType* handle_value(Value&& v)\n    {\n        if (ref_stack.empty())\n        {\n            root = BasicJsonType(std::forward<Value>(v));\n            return &root;\n        }\n\n        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());\n\n        if (ref_stack.back()->is_array())\n        {\n            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));\n            return &(ref_stack.back()->m_data.m_value.array->back());\n        }\n\n        JSON_ASSERT(ref_stack.back()->is_object());\n        JSON_ASSERT(object_element);\n        *object_element = BasicJsonType(std::forward<Value>(v));\n        return object_element;\n    }\n\n    /// the parsed JSON value\n    BasicJsonType& root;\n    /// stack to model hierarchy of values\n    std::vector<BasicJsonType*> ref_stack {};\n    /// helper to hold the reference for the next object element\n    BasicJsonType* object_element = nullptr;\n    /// whether a syntax error occurred\n    bool errored = false;\n    /// whether to throw exceptions in case of errors\n    const bool allow_exceptions = true;\n};\n\ntemplate<typename BasicJsonType>\nclass json_sax_dom_callback_parser\n{\n  public:\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n    using parser_callback_t = typename BasicJsonType::parser_callback_t;\n    using parse_event_t = typename BasicJsonType::parse_event_t;\n\n    json_sax_dom_callback_parser(BasicJsonType& r,\n                                 const parser_callback_t cb,\n                                 const bool allow_exceptions_ = true)\n        : root(r), callback(cb), allow_exceptions(allow_exceptions_)\n    {\n        keep_stack.push_back(true);\n    }\n\n    // make class move-only\n    json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete;\n    json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete;\n    json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    ~json_sax_dom_callback_parser() = default;\n\n    bool null()\n    {\n        handle_value(nullptr);\n        return true;\n    }\n\n    bool boolean(bool val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_integer(number_integer_t val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& /*unused*/)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool string(string_t& val)\n    {\n        handle_value(val);\n        return true;\n    }\n\n    bool binary(binary_t& val)\n    {\n        handle_value(std::move(val));\n        return true;\n    }\n\n    bool start_object(std::size_t len)\n    {\n        // check callback for object start\n        const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::object_start, discarded);\n        keep_stack.push_back(keep);\n\n        auto val = handle_value(BasicJsonType::value_t::object, true);\n        ref_stack.push_back(val.second);\n\n        // check object limit\n        if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))\n        {\n            JSON_THROW(out_of_range::create(408, concat(\"excessive object size: \", std::to_string(len)), ref_stack.back()));\n        }\n\n        return true;\n    }\n\n    bool key(string_t& val)\n    {\n        BasicJsonType k = BasicJsonType(val);\n\n        // check callback for key\n        const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::key, k);\n        key_keep_stack.push_back(keep);\n\n        // add discarded value at given key and store the reference for later\n        if (keep && ref_stack.back())\n        {\n            object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded);\n        }\n\n        return true;\n    }\n\n    bool end_object()\n    {\n        if (ref_stack.back())\n        {\n            if (!callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back()))\n            {\n                // discard object\n                *ref_stack.back() = discarded;\n            }\n            else\n            {\n                ref_stack.back()->set_parents();\n            }\n        }\n\n        JSON_ASSERT(!ref_stack.empty());\n        JSON_ASSERT(!keep_stack.empty());\n        ref_stack.pop_back();\n        keep_stack.pop_back();\n\n        if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured())\n        {\n            // remove discarded value\n            for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it)\n            {\n                if (it->is_discarded())\n                {\n                    ref_stack.back()->erase(it);\n                    break;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    bool start_array(std::size_t len)\n    {\n        const bool keep = callback(static_cast<int>(ref_stack.size()), parse_event_t::array_start, discarded);\n        keep_stack.push_back(keep);\n\n        auto val = handle_value(BasicJsonType::value_t::array, true);\n        ref_stack.push_back(val.second);\n\n        // check array limit\n        if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast<std::size_t>(-1) && len > ref_stack.back()->max_size()))\n        {\n            JSON_THROW(out_of_range::create(408, concat(\"excessive array size: \", std::to_string(len)), ref_stack.back()));\n        }\n\n        return true;\n    }\n\n    bool end_array()\n    {\n        bool keep = true;\n\n        if (ref_stack.back())\n        {\n            keep = callback(static_cast<int>(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back());\n            if (keep)\n            {\n                ref_stack.back()->set_parents();\n            }\n            else\n            {\n                // discard array\n                *ref_stack.back() = discarded;\n            }\n        }\n\n        JSON_ASSERT(!ref_stack.empty());\n        JSON_ASSERT(!keep_stack.empty());\n        ref_stack.pop_back();\n        keep_stack.pop_back();\n\n        // remove discarded value\n        if (!keep && !ref_stack.empty() && ref_stack.back()->is_array())\n        {\n            ref_stack.back()->m_data.m_value.array->pop_back();\n        }\n\n        return true;\n    }\n\n    template<class Exception>\n    bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,\n                     const Exception& ex)\n    {\n        errored = true;\n        static_cast<void>(ex);\n        if (allow_exceptions)\n        {\n            JSON_THROW(ex);\n        }\n        return false;\n    }\n\n    constexpr bool is_errored() const\n    {\n        return errored;\n    }\n\n  private:\n    /*!\n    @param[in] v  value to add to the JSON value we build during parsing\n    @param[in] skip_callback  whether we should skip calling the callback\n               function; this is required after start_array() and\n               start_object() SAX events, because otherwise we would call the\n               callback function with an empty array or object, respectively.\n\n    @invariant If the ref stack is empty, then the passed value will be the new\n               root.\n    @invariant If the ref stack contains a value, then it is an array or an\n               object to which we can add elements\n\n    @return pair of boolean (whether value should be kept) and pointer (to the\n            passed value in the ref_stack hierarchy; nullptr if not kept)\n    */\n    template<typename Value>\n    std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool skip_callback = false)\n    {\n        JSON_ASSERT(!keep_stack.empty());\n\n        // do not handle this value if we know it would be added to a discarded\n        // container\n        if (!keep_stack.back())\n        {\n            return {false, nullptr};\n        }\n\n        // create value\n        auto value = BasicJsonType(std::forward<Value>(v));\n\n        // check callback\n        const bool keep = skip_callback || callback(static_cast<int>(ref_stack.size()), parse_event_t::value, value);\n\n        // do not handle this value if we just learnt it shall be discarded\n        if (!keep)\n        {\n            return {false, nullptr};\n        }\n\n        if (ref_stack.empty())\n        {\n            root = std::move(value);\n            return {true, & root};\n        }\n\n        // skip this value if we already decided to skip the parent\n        // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360)\n        if (!ref_stack.back())\n        {\n            return {false, nullptr};\n        }\n\n        // we now only expect arrays and objects\n        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());\n\n        // array\n        if (ref_stack.back()->is_array())\n        {\n            ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value));\n            return {true, & (ref_stack.back()->m_data.m_value.array->back())};\n        }\n\n        // object\n        JSON_ASSERT(ref_stack.back()->is_object());\n        // check if we should store an element for the current key\n        JSON_ASSERT(!key_keep_stack.empty());\n        const bool store_element = key_keep_stack.back();\n        key_keep_stack.pop_back();\n\n        if (!store_element)\n        {\n            return {false, nullptr};\n        }\n\n        JSON_ASSERT(object_element);\n        *object_element = std::move(value);\n        return {true, object_element};\n    }\n\n    /// the parsed JSON value\n    BasicJsonType& root;\n    /// stack to model hierarchy of values\n    std::vector<BasicJsonType*> ref_stack {};\n    /// stack to manage which values to keep\n    std::vector<bool> keep_stack {};\n    /// stack to manage which object keys to keep\n    std::vector<bool> key_keep_stack {};\n    /// helper to hold the reference for the next object element\n    BasicJsonType* object_element = nullptr;\n    /// whether a syntax error occurred\n    bool errored = false;\n    /// callback function\n    const parser_callback_t callback = nullptr;\n    /// whether to throw exceptions in case of errors\n    const bool allow_exceptions = true;\n    /// a discarded value for the callback\n    BasicJsonType discarded = BasicJsonType::value_t::discarded;\n};\n\ntemplate<typename BasicJsonType>\nclass json_sax_acceptor\n{\n  public:\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n\n    bool null()\n    {\n        return true;\n    }\n\n    bool boolean(bool /*unused*/)\n    {\n        return true;\n    }\n\n    bool number_integer(number_integer_t /*unused*/)\n    {\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t /*unused*/)\n    {\n        return true;\n    }\n\n    bool number_float(number_float_t /*unused*/, const string_t& /*unused*/)\n    {\n        return true;\n    }\n\n    bool string(string_t& /*unused*/)\n    {\n        return true;\n    }\n\n    bool binary(binary_t& /*unused*/)\n    {\n        return true;\n    }\n\n    bool start_object(std::size_t /*unused*/ = static_cast<std::size_t>(-1))\n    {\n        return true;\n    }\n\n    bool key(string_t& /*unused*/)\n    {\n        return true;\n    }\n\n    bool end_object()\n    {\n        return true;\n    }\n\n    bool start_array(std::size_t /*unused*/ = static_cast<std::size_t>(-1))\n    {\n        return true;\n    }\n\n    bool end_array()\n    {\n        return true;\n    }\n\n    bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/)\n    {\n        return false;\n    }\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/input/lexer.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <array> // array\n#include <clocale> // localeconv\n#include <cstddef> // size_t\n#include <cstdio> // snprintf\n#include <cstdlib> // strtof, strtod, strtold, strtoll, strtoull\n#include <initializer_list> // initializer_list\n#include <string> // char_traits, string\n#include <utility> // move\n#include <vector> // vector\n\n// #include <nlohmann/detail/input/input_adapters.hpp>\n\n// #include <nlohmann/detail/input/position_t.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n///////////\n// lexer //\n///////////\n\ntemplate<typename BasicJsonType>\nclass lexer_base\n{\n  public:\n    /// token types for the parser\n    enum class token_type\n    {\n        uninitialized,    ///< indicating the scanner is uninitialized\n        literal_true,     ///< the `true` literal\n        literal_false,    ///< the `false` literal\n        literal_null,     ///< the `null` literal\n        value_string,     ///< a string -- use get_string() for actual value\n        value_unsigned,   ///< an unsigned integer -- use get_number_unsigned() for actual value\n        value_integer,    ///< a signed integer -- use get_number_integer() for actual value\n        value_float,      ///< an floating point number -- use get_number_float() for actual value\n        begin_array,      ///< the character for array begin `[`\n        begin_object,     ///< the character for object begin `{`\n        end_array,        ///< the character for array end `]`\n        end_object,       ///< the character for object end `}`\n        name_separator,   ///< the name separator `:`\n        value_separator,  ///< the value separator `,`\n        parse_error,      ///< indicating a parse error\n        end_of_input,     ///< indicating the end of the input buffer\n        literal_or_value  ///< a literal or the begin of a value (only for diagnostics)\n    };\n\n    /// return name of values of type token_type (only used for errors)\n    JSON_HEDLEY_RETURNS_NON_NULL\n    JSON_HEDLEY_CONST\n    static const char* token_type_name(const token_type t) noexcept\n    {\n        switch (t)\n        {\n            case token_type::uninitialized:\n                return \"<uninitialized>\";\n            case token_type::literal_true:\n                return \"true literal\";\n            case token_type::literal_false:\n                return \"false literal\";\n            case token_type::literal_null:\n                return \"null literal\";\n            case token_type::value_string:\n                return \"string literal\";\n            case token_type::value_unsigned:\n            case token_type::value_integer:\n            case token_type::value_float:\n                return \"number literal\";\n            case token_type::begin_array:\n                return \"'['\";\n            case token_type::begin_object:\n                return \"'{'\";\n            case token_type::end_array:\n                return \"']'\";\n            case token_type::end_object:\n                return \"'}'\";\n            case token_type::name_separator:\n                return \"':'\";\n            case token_type::value_separator:\n                return \"','\";\n            case token_type::parse_error:\n                return \"<parse error>\";\n            case token_type::end_of_input:\n                return \"end of input\";\n            case token_type::literal_or_value:\n                return \"'[', '{', or a literal\";\n            // LCOV_EXCL_START\n            default: // catch non-enum values\n                return \"unknown token\";\n                // LCOV_EXCL_STOP\n        }\n    }\n};\n/*!\n@brief lexical analysis\n\nThis class organizes the lexical analysis during JSON deserialization.\n*/\ntemplate<typename BasicJsonType, typename InputAdapterType>\nclass lexer : public lexer_base<BasicJsonType>\n{\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using char_type = typename InputAdapterType::char_type;\n    using char_int_type = typename char_traits<char_type>::int_type;\n\n  public:\n    using token_type = typename lexer_base<BasicJsonType>::token_type;\n\n    explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept\n        : ia(std::move(adapter))\n        , ignore_comments(ignore_comments_)\n        , decimal_point_char(static_cast<char_int_type>(get_decimal_point()))\n    {}\n\n    // delete because of pointer members\n    lexer(const lexer&) = delete;\n    lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    lexer& operator=(lexer&) = delete;\n    lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    ~lexer() = default;\n\n  private:\n    /////////////////////\n    // locales\n    /////////////////////\n\n    /// return the locale-dependent decimal point\n    JSON_HEDLEY_PURE\n    static char get_decimal_point() noexcept\n    {\n        const auto* loc = localeconv();\n        JSON_ASSERT(loc != nullptr);\n        return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point);\n    }\n\n    /////////////////////\n    // scan functions\n    /////////////////////\n\n    /*!\n    @brief get codepoint from 4 hex characters following `\\u`\n\n    For input \"\\u c1 c2 c3 c4\" the codepoint is:\n      (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4\n    = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0)\n\n    Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f'\n    must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The\n    conversion is done by subtracting the offset (0x30, 0x37, and 0x57)\n    between the ASCII value of the character and the desired integer value.\n\n    @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or\n            non-hex character)\n    */\n    int get_codepoint()\n    {\n        // this function only makes sense after reading `\\u`\n        JSON_ASSERT(current == 'u');\n        int codepoint = 0;\n\n        const auto factors = { 12u, 8u, 4u, 0u };\n        for (const auto factor : factors)\n        {\n            get();\n\n            if (current >= '0' && current <= '9')\n            {\n                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);\n            }\n            else if (current >= 'A' && current <= 'F')\n            {\n                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);\n            }\n            else if (current >= 'a' && current <= 'f')\n            {\n                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);\n            }\n            else\n            {\n                return -1;\n            }\n        }\n\n        JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF);\n        return codepoint;\n    }\n\n    /*!\n    @brief check if the next byte(s) are inside a given range\n\n    Adds the current byte and, for each passed range, reads a new byte and\n    checks if it is inside the range. If a violation was detected, set up an\n    error message and return false. Otherwise, return true.\n\n    @param[in] ranges  list of integers; interpreted as list of pairs of\n                       inclusive lower and upper bound, respectively\n\n    @pre The passed list @a ranges must have 2, 4, or 6 elements; that is,\n         1, 2, or 3 pairs. This precondition is enforced by an assertion.\n\n    @return true if and only if no range violation was detected\n    */\n    bool next_byte_in_range(std::initializer_list<char_int_type> ranges)\n    {\n        JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6);\n        add(current);\n\n        for (auto range = ranges.begin(); range != ranges.end(); ++range)\n        {\n            get();\n            if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions)\n            {\n                add(current);\n            }\n            else\n            {\n                error_message = \"invalid string: ill-formed UTF-8 byte\";\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /*!\n    @brief scan a string literal\n\n    This function scans a string according to Sect. 7 of RFC 8259. While\n    scanning, bytes are escaped and copied into buffer token_buffer. Then the\n    function returns successfully, token_buffer is *not* null-terminated (as it\n    may contain \\0 bytes), and token_buffer.size() is the number of bytes in the\n    string.\n\n    @return token_type::value_string if string could be successfully scanned,\n            token_type::parse_error otherwise\n\n    @note In case of errors, variable error_message contains a textual\n          description.\n    */\n    token_type scan_string()\n    {\n        // reset token_buffer (ignore opening quote)\n        reset();\n\n        // we entered the function by reading an open quote\n        JSON_ASSERT(current == '\\\"');\n\n        while (true)\n        {\n            // get next character\n            switch (get())\n            {\n                // end of file while parsing string\n                case char_traits<char_type>::eof():\n                {\n                    error_message = \"invalid string: missing closing quote\";\n                    return token_type::parse_error;\n                }\n\n                // closing quote\n                case '\\\"':\n                {\n                    return token_type::value_string;\n                }\n\n                // escapes\n                case '\\\\':\n                {\n                    switch (get())\n                    {\n                        // quotation mark\n                        case '\\\"':\n                            add('\\\"');\n                            break;\n                        // reverse solidus\n                        case '\\\\':\n                            add('\\\\');\n                            break;\n                        // solidus\n                        case '/':\n                            add('/');\n                            break;\n                        // backspace\n                        case 'b':\n                            add('\\b');\n                            break;\n                        // form feed\n                        case 'f':\n                            add('\\f');\n                            break;\n                        // line feed\n                        case 'n':\n                            add('\\n');\n                            break;\n                        // carriage return\n                        case 'r':\n                            add('\\r');\n                            break;\n                        // tab\n                        case 't':\n                            add('\\t');\n                            break;\n\n                        // unicode escapes\n                        case 'u':\n                        {\n                            const int codepoint1 = get_codepoint();\n                            int codepoint = codepoint1; // start with codepoint1\n\n                            if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1))\n                            {\n                                error_message = \"invalid string: '\\\\u' must be followed by 4 hex digits\";\n                                return token_type::parse_error;\n                            }\n\n                            // check if code point is a high surrogate\n                            if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF)\n                            {\n                                // expect next \\uxxxx entry\n                                if (JSON_HEDLEY_LIKELY(get() == '\\\\' && get() == 'u'))\n                                {\n                                    const int codepoint2 = get_codepoint();\n\n                                    if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1))\n                                    {\n                                        error_message = \"invalid string: '\\\\u' must be followed by 4 hex digits\";\n                                        return token_type::parse_error;\n                                    }\n\n                                    // check if codepoint2 is a low surrogate\n                                    if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF))\n                                    {\n                                        // overwrite codepoint\n                                        codepoint = static_cast<int>(\n                                                        // high surrogate occupies the most significant 22 bits\n                                                        (static_cast<unsigned int>(codepoint1) << 10u)\n                                                        // low surrogate occupies the least significant 15 bits\n                                                        + static_cast<unsigned int>(codepoint2)\n                                                        // there is still the 0xD800, 0xDC00 and 0x10000 noise\n                                                        // in the result, so we have to subtract with:\n                                                        // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00\n                                                        - 0x35FDC00u);\n                                    }\n                                    else\n                                    {\n                                        error_message = \"invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF\";\n                                        return token_type::parse_error;\n                                    }\n                                }\n                                else\n                                {\n                                    error_message = \"invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF\";\n                                    return token_type::parse_error;\n                                }\n                            }\n                            else\n                            {\n                                if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF))\n                                {\n                                    error_message = \"invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF\";\n                                    return token_type::parse_error;\n                                }\n                            }\n\n                            // result of the above calculation yields a proper codepoint\n                            JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);\n\n                            // translate codepoint into bytes\n                            if (codepoint < 0x80)\n                            {\n                                // 1-byte characters: 0xxxxxxx (ASCII)\n                                add(static_cast<char_int_type>(codepoint));\n                            }\n                            else if (codepoint <= 0x7FF)\n                            {\n                                // 2-byte characters: 110xxxxx 10xxxxxx\n                                add(static_cast<char_int_type>(0xC0u | (static_cast<unsigned int>(codepoint) >> 6u)));\n                                add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));\n                            }\n                            else if (codepoint <= 0xFFFF)\n                            {\n                                // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx\n                                add(static_cast<char_int_type>(0xE0u | (static_cast<unsigned int>(codepoint) >> 12u)));\n                                add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu)));\n                                add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));\n                            }\n                            else\n                            {\n                                // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n                                add(static_cast<char_int_type>(0xF0u | (static_cast<unsigned int>(codepoint) >> 18u)));\n                                add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 12u) & 0x3Fu)));\n                                add(static_cast<char_int_type>(0x80u | ((static_cast<unsigned int>(codepoint) >> 6u) & 0x3Fu)));\n                                add(static_cast<char_int_type>(0x80u | (static_cast<unsigned int>(codepoint) & 0x3Fu)));\n                            }\n\n                            break;\n                        }\n\n                        // other characters after escape\n                        default:\n                            error_message = \"invalid string: forbidden character after backslash\";\n                            return token_type::parse_error;\n                    }\n\n                    break;\n                }\n\n                // invalid control characters\n                case 0x00:\n                {\n                    error_message = \"invalid string: control character U+0000 (NUL) must be escaped to \\\\u0000\";\n                    return token_type::parse_error;\n                }\n\n                case 0x01:\n                {\n                    error_message = \"invalid string: control character U+0001 (SOH) must be escaped to \\\\u0001\";\n                    return token_type::parse_error;\n                }\n\n                case 0x02:\n                {\n                    error_message = \"invalid string: control character U+0002 (STX) must be escaped to \\\\u0002\";\n                    return token_type::parse_error;\n                }\n\n                case 0x03:\n                {\n                    error_message = \"invalid string: control character U+0003 (ETX) must be escaped to \\\\u0003\";\n                    return token_type::parse_error;\n                }\n\n                case 0x04:\n                {\n                    error_message = \"invalid string: control character U+0004 (EOT) must be escaped to \\\\u0004\";\n                    return token_type::parse_error;\n                }\n\n                case 0x05:\n                {\n                    error_message = \"invalid string: control character U+0005 (ENQ) must be escaped to \\\\u0005\";\n                    return token_type::parse_error;\n                }\n\n                case 0x06:\n                {\n                    error_message = \"invalid string: control character U+0006 (ACK) must be escaped to \\\\u0006\";\n                    return token_type::parse_error;\n                }\n\n                case 0x07:\n                {\n                    error_message = \"invalid string: control character U+0007 (BEL) must be escaped to \\\\u0007\";\n                    return token_type::parse_error;\n                }\n\n                case 0x08:\n                {\n                    error_message = \"invalid string: control character U+0008 (BS) must be escaped to \\\\u0008 or \\\\b\";\n                    return token_type::parse_error;\n                }\n\n                case 0x09:\n                {\n                    error_message = \"invalid string: control character U+0009 (HT) must be escaped to \\\\u0009 or \\\\t\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0A:\n                {\n                    error_message = \"invalid string: control character U+000A (LF) must be escaped to \\\\u000A or \\\\n\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0B:\n                {\n                    error_message = \"invalid string: control character U+000B (VT) must be escaped to \\\\u000B\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0C:\n                {\n                    error_message = \"invalid string: control character U+000C (FF) must be escaped to \\\\u000C or \\\\f\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0D:\n                {\n                    error_message = \"invalid string: control character U+000D (CR) must be escaped to \\\\u000D or \\\\r\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0E:\n                {\n                    error_message = \"invalid string: control character U+000E (SO) must be escaped to \\\\u000E\";\n                    return token_type::parse_error;\n                }\n\n                case 0x0F:\n                {\n                    error_message = \"invalid string: control character U+000F (SI) must be escaped to \\\\u000F\";\n                    return token_type::parse_error;\n                }\n\n                case 0x10:\n                {\n                    error_message = \"invalid string: control character U+0010 (DLE) must be escaped to \\\\u0010\";\n                    return token_type::parse_error;\n                }\n\n                case 0x11:\n                {\n                    error_message = \"invalid string: control character U+0011 (DC1) must be escaped to \\\\u0011\";\n                    return token_type::parse_error;\n                }\n\n                case 0x12:\n                {\n                    error_message = \"invalid string: control character U+0012 (DC2) must be escaped to \\\\u0012\";\n                    return token_type::parse_error;\n                }\n\n                case 0x13:\n                {\n                    error_message = \"invalid string: control character U+0013 (DC3) must be escaped to \\\\u0013\";\n                    return token_type::parse_error;\n                }\n\n                case 0x14:\n                {\n                    error_message = \"invalid string: control character U+0014 (DC4) must be escaped to \\\\u0014\";\n                    return token_type::parse_error;\n                }\n\n                case 0x15:\n                {\n                    error_message = \"invalid string: control character U+0015 (NAK) must be escaped to \\\\u0015\";\n                    return token_type::parse_error;\n                }\n\n                case 0x16:\n                {\n                    error_message = \"invalid string: control character U+0016 (SYN) must be escaped to \\\\u0016\";\n                    return token_type::parse_error;\n                }\n\n                case 0x17:\n                {\n                    error_message = \"invalid string: control character U+0017 (ETB) must be escaped to \\\\u0017\";\n                    return token_type::parse_error;\n                }\n\n                case 0x18:\n                {\n                    error_message = \"invalid string: control character U+0018 (CAN) must be escaped to \\\\u0018\";\n                    return token_type::parse_error;\n                }\n\n                case 0x19:\n                {\n                    error_message = \"invalid string: control character U+0019 (EM) must be escaped to \\\\u0019\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1A:\n                {\n                    error_message = \"invalid string: control character U+001A (SUB) must be escaped to \\\\u001A\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1B:\n                {\n                    error_message = \"invalid string: control character U+001B (ESC) must be escaped to \\\\u001B\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1C:\n                {\n                    error_message = \"invalid string: control character U+001C (FS) must be escaped to \\\\u001C\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1D:\n                {\n                    error_message = \"invalid string: control character U+001D (GS) must be escaped to \\\\u001D\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1E:\n                {\n                    error_message = \"invalid string: control character U+001E (RS) must be escaped to \\\\u001E\";\n                    return token_type::parse_error;\n                }\n\n                case 0x1F:\n                {\n                    error_message = \"invalid string: control character U+001F (US) must be escaped to \\\\u001F\";\n                    return token_type::parse_error;\n                }\n\n                // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace))\n                case 0x20:\n                case 0x21:\n                case 0x23:\n                case 0x24:\n                case 0x25:\n                case 0x26:\n                case 0x27:\n                case 0x28:\n                case 0x29:\n                case 0x2A:\n                case 0x2B:\n                case 0x2C:\n                case 0x2D:\n                case 0x2E:\n                case 0x2F:\n                case 0x30:\n                case 0x31:\n                case 0x32:\n                case 0x33:\n                case 0x34:\n                case 0x35:\n                case 0x36:\n                case 0x37:\n                case 0x38:\n                case 0x39:\n                case 0x3A:\n                case 0x3B:\n                case 0x3C:\n                case 0x3D:\n                case 0x3E:\n                case 0x3F:\n                case 0x40:\n                case 0x41:\n                case 0x42:\n                case 0x43:\n                case 0x44:\n                case 0x45:\n                case 0x46:\n                case 0x47:\n                case 0x48:\n                case 0x49:\n                case 0x4A:\n                case 0x4B:\n                case 0x4C:\n                case 0x4D:\n                case 0x4E:\n                case 0x4F:\n                case 0x50:\n                case 0x51:\n                case 0x52:\n                case 0x53:\n                case 0x54:\n                case 0x55:\n                case 0x56:\n                case 0x57:\n                case 0x58:\n                case 0x59:\n                case 0x5A:\n                case 0x5B:\n                case 0x5D:\n                case 0x5E:\n                case 0x5F:\n                case 0x60:\n                case 0x61:\n                case 0x62:\n                case 0x63:\n                case 0x64:\n                case 0x65:\n                case 0x66:\n                case 0x67:\n                case 0x68:\n                case 0x69:\n                case 0x6A:\n                case 0x6B:\n                case 0x6C:\n                case 0x6D:\n                case 0x6E:\n                case 0x6F:\n                case 0x70:\n                case 0x71:\n                case 0x72:\n                case 0x73:\n                case 0x74:\n                case 0x75:\n                case 0x76:\n                case 0x77:\n                case 0x78:\n                case 0x79:\n                case 0x7A:\n                case 0x7B:\n                case 0x7C:\n                case 0x7D:\n                case 0x7E:\n                case 0x7F:\n                {\n                    add(current);\n                    break;\n                }\n\n                // U+0080..U+07FF: bytes C2..DF 80..BF\n                case 0xC2:\n                case 0xC3:\n                case 0xC4:\n                case 0xC5:\n                case 0xC6:\n                case 0xC7:\n                case 0xC8:\n                case 0xC9:\n                case 0xCA:\n                case 0xCB:\n                case 0xCC:\n                case 0xCD:\n                case 0xCE:\n                case 0xCF:\n                case 0xD0:\n                case 0xD1:\n                case 0xD2:\n                case 0xD3:\n                case 0xD4:\n                case 0xD5:\n                case 0xD6:\n                case 0xD7:\n                case 0xD8:\n                case 0xD9:\n                case 0xDA:\n                case 0xDB:\n                case 0xDC:\n                case 0xDD:\n                case 0xDE:\n                case 0xDF:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF})))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+0800..U+0FFF: bytes E0 A0..BF 80..BF\n                case 0xE0:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF\n                // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF\n                case 0xE1:\n                case 0xE2:\n                case 0xE3:\n                case 0xE4:\n                case 0xE5:\n                case 0xE6:\n                case 0xE7:\n                case 0xE8:\n                case 0xE9:\n                case 0xEA:\n                case 0xEB:\n                case 0xEC:\n                case 0xEE:\n                case 0xEF:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+D000..U+D7FF: bytes ED 80..9F 80..BF\n                case 0xED:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF\n                case 0xF0:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF\n                case 0xF1:\n                case 0xF2:\n                case 0xF3:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF\n                case 0xF4:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF}))))\n                    {\n                        return token_type::parse_error;\n                    }\n                    break;\n                }\n\n                // remaining bytes (80..C1 and F5..FF) are ill-formed\n                default:\n                {\n                    error_message = \"invalid string: ill-formed UTF-8 byte\";\n                    return token_type::parse_error;\n                }\n            }\n        }\n    }\n\n    /*!\n     * @brief scan a comment\n     * @return whether comment could be scanned successfully\n     */\n    bool scan_comment()\n    {\n        switch (get())\n        {\n            // single-line comments skip input until a newline or EOF is read\n            case '/':\n            {\n                while (true)\n                {\n                    switch (get())\n                    {\n                        case '\\n':\n                        case '\\r':\n                        case char_traits<char_type>::eof():\n                        case '\\0':\n                            return true;\n\n                        default:\n                            break;\n                    }\n                }\n            }\n\n            // multi-line comments skip input until */ is read\n            case '*':\n            {\n                while (true)\n                {\n                    switch (get())\n                    {\n                        case char_traits<char_type>::eof():\n                        case '\\0':\n                        {\n                            error_message = \"invalid comment; missing closing '*/'\";\n                            return false;\n                        }\n\n                        case '*':\n                        {\n                            switch (get())\n                            {\n                                case '/':\n                                    return true;\n\n                                default:\n                                {\n                                    unget();\n                                    continue;\n                                }\n                            }\n                        }\n\n                        default:\n                            continue;\n                    }\n                }\n            }\n\n            // unexpected character after reading '/'\n            default:\n            {\n                error_message = \"invalid comment; expecting '/' or '*' after '/'\";\n                return false;\n            }\n        }\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    static void strtof(float& f, const char* str, char** endptr) noexcept\n    {\n        f = std::strtof(str, endptr);\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    static void strtof(double& f, const char* str, char** endptr) noexcept\n    {\n        f = std::strtod(str, endptr);\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    static void strtof(long double& f, const char* str, char** endptr) noexcept\n    {\n        f = std::strtold(str, endptr);\n    }\n\n    /*!\n    @brief scan a number literal\n\n    This function scans a string according to Sect. 6 of RFC 8259.\n\n    The function is realized with a deterministic finite state machine derived\n    from the grammar described in RFC 8259. Starting in state \"init\", the\n    input is read and used to determined the next state. Only state \"done\"\n    accepts the number. State \"error\" is a trap state to model errors. In the\n    table below, \"anything\" means any character but the ones listed before.\n\n    state    | 0        | 1-9      | e E      | +       | -       | .        | anything\n    ---------|----------|----------|----------|---------|---------|----------|-----------\n    init     | zero     | any1     | [error]  | [error] | minus   | [error]  | [error]\n    minus    | zero     | any1     | [error]  | [error] | [error] | [error]  | [error]\n    zero     | done     | done     | exponent | done    | done    | decimal1 | done\n    any1     | any1     | any1     | exponent | done    | done    | decimal1 | done\n    decimal1 | decimal2 | decimal2 | [error]  | [error] | [error] | [error]  | [error]\n    decimal2 | decimal2 | decimal2 | exponent | done    | done    | done     | done\n    exponent | any2     | any2     | [error]  | sign    | sign    | [error]  | [error]\n    sign     | any2     | any2     | [error]  | [error] | [error] | [error]  | [error]\n    any2     | any2     | any2     | done     | done    | done    | done     | done\n\n    The state machine is realized with one label per state (prefixed with\n    \"scan_number_\") and `goto` statements between them. The state machine\n    contains cycles, but any cycle can be left when EOF is read. Therefore,\n    the function is guaranteed to terminate.\n\n    During scanning, the read bytes are stored in token_buffer. This string is\n    then converted to a signed integer, an unsigned integer, or a\n    floating-point number.\n\n    @return token_type::value_unsigned, token_type::value_integer, or\n            token_type::value_float if number could be successfully scanned,\n            token_type::parse_error otherwise\n\n    @note The scanner is independent of the current locale. Internally, the\n          locale's decimal point is used instead of `.` to work with the\n          locale-dependent converters.\n    */\n    token_type scan_number()  // lgtm [cpp/use-of-goto]\n    {\n        // reset token_buffer to store the number's bytes\n        reset();\n\n        // the type of the parsed number; initially set to unsigned; will be\n        // changed if minus sign, decimal point or exponent is read\n        token_type number_type = token_type::value_unsigned;\n\n        // state (init): we just found out we need to scan a number\n        switch (current)\n        {\n            case '-':\n            {\n                add(current);\n                goto scan_number_minus;\n            }\n\n            case '0':\n            {\n                add(current);\n                goto scan_number_zero;\n            }\n\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any1;\n            }\n\n            // all other characters are rejected outside scan_number()\n            default:            // LCOV_EXCL_LINE\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        }\n\nscan_number_minus:\n        // state: we just parsed a leading minus sign\n        number_type = token_type::value_integer;\n        switch (get())\n        {\n            case '0':\n            {\n                add(current);\n                goto scan_number_zero;\n            }\n\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any1;\n            }\n\n            default:\n            {\n                error_message = \"invalid number; expected digit after '-'\";\n                return token_type::parse_error;\n            }\n        }\n\nscan_number_zero:\n        // state: we just parse a zero (maybe with a leading minus sign)\n        switch (get())\n        {\n            case '.':\n            {\n                add(decimal_point_char);\n                goto scan_number_decimal1;\n            }\n\n            case 'e':\n            case 'E':\n            {\n                add(current);\n                goto scan_number_exponent;\n            }\n\n            default:\n                goto scan_number_done;\n        }\n\nscan_number_any1:\n        // state: we just parsed a number 0-9 (maybe with a leading minus sign)\n        switch (get())\n        {\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any1;\n            }\n\n            case '.':\n            {\n                add(decimal_point_char);\n                goto scan_number_decimal1;\n            }\n\n            case 'e':\n            case 'E':\n            {\n                add(current);\n                goto scan_number_exponent;\n            }\n\n            default:\n                goto scan_number_done;\n        }\n\nscan_number_decimal1:\n        // state: we just parsed a decimal point\n        number_type = token_type::value_float;\n        switch (get())\n        {\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_decimal2;\n            }\n\n            default:\n            {\n                error_message = \"invalid number; expected digit after '.'\";\n                return token_type::parse_error;\n            }\n        }\n\nscan_number_decimal2:\n        // we just parsed at least one number after a decimal point\n        switch (get())\n        {\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_decimal2;\n            }\n\n            case 'e':\n            case 'E':\n            {\n                add(current);\n                goto scan_number_exponent;\n            }\n\n            default:\n                goto scan_number_done;\n        }\n\nscan_number_exponent:\n        // we just parsed an exponent\n        number_type = token_type::value_float;\n        switch (get())\n        {\n            case '+':\n            case '-':\n            {\n                add(current);\n                goto scan_number_sign;\n            }\n\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any2;\n            }\n\n            default:\n            {\n                error_message =\n                    \"invalid number; expected '+', '-', or digit after exponent\";\n                return token_type::parse_error;\n            }\n        }\n\nscan_number_sign:\n        // we just parsed an exponent sign\n        switch (get())\n        {\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any2;\n            }\n\n            default:\n            {\n                error_message = \"invalid number; expected digit after exponent sign\";\n                return token_type::parse_error;\n            }\n        }\n\nscan_number_any2:\n        // we just parsed a number after the exponent or exponent sign\n        switch (get())\n        {\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n            {\n                add(current);\n                goto scan_number_any2;\n            }\n\n            default:\n                goto scan_number_done;\n        }\n\nscan_number_done:\n        // unget the character after the number (we only read it to know that\n        // we are done scanning a number)\n        unget();\n\n        char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n        errno = 0;\n\n        // try to parse integers first and fall back to floats\n        if (number_type == token_type::value_unsigned)\n        {\n            const auto x = std::strtoull(token_buffer.data(), &endptr, 10);\n\n            // we checked the number format before\n            JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());\n\n            if (errno == 0)\n            {\n                value_unsigned = static_cast<number_unsigned_t>(x);\n                if (value_unsigned == x)\n                {\n                    return token_type::value_unsigned;\n                }\n            }\n        }\n        else if (number_type == token_type::value_integer)\n        {\n            const auto x = std::strtoll(token_buffer.data(), &endptr, 10);\n\n            // we checked the number format before\n            JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());\n\n            if (errno == 0)\n            {\n                value_integer = static_cast<number_integer_t>(x);\n                if (value_integer == x)\n                {\n                    return token_type::value_integer;\n                }\n            }\n        }\n\n        // this code is reached if we parse a floating-point number or if an\n        // integer conversion above failed\n        strtof(value_float, token_buffer.data(), &endptr);\n\n        // we checked the number format before\n        JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size());\n\n        return token_type::value_float;\n    }\n\n    /*!\n    @param[in] literal_text  the literal text to expect\n    @param[in] length        the length of the passed literal text\n    @param[in] return_type   the token type to return on success\n    */\n    JSON_HEDLEY_NON_NULL(2)\n    token_type scan_literal(const char_type* literal_text, const std::size_t length,\n                            token_type return_type)\n    {\n        JSON_ASSERT(char_traits<char_type>::to_char_type(current) == literal_text[0]);\n        for (std::size_t i = 1; i < length; ++i)\n        {\n            if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != literal_text[i]))\n            {\n                error_message = \"invalid literal\";\n                return token_type::parse_error;\n            }\n        }\n        return return_type;\n    }\n\n    /////////////////////\n    // input management\n    /////////////////////\n\n    /// reset token_buffer; current character is beginning of token\n    void reset() noexcept\n    {\n        token_buffer.clear();\n        token_string.clear();\n        token_string.push_back(char_traits<char_type>::to_char_type(current));\n    }\n\n    /*\n    @brief get next character from the input\n\n    This function provides the interface to the used input adapter. It does\n    not throw in case the input reached EOF, but returns a\n    `char_traits<char>::eof()` in that case.  Stores the scanned characters\n    for use in error messages.\n\n    @return character read from the input\n    */\n    char_int_type get()\n    {\n        ++position.chars_read_total;\n        ++position.chars_read_current_line;\n\n        if (next_unget)\n        {\n            // just reset the next_unget variable and work with current\n            next_unget = false;\n        }\n        else\n        {\n            current = ia.get_character();\n        }\n\n        if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))\n        {\n            token_string.push_back(char_traits<char_type>::to_char_type(current));\n        }\n\n        if (current == '\\n')\n        {\n            ++position.lines_read;\n            position.chars_read_current_line = 0;\n        }\n\n        return current;\n    }\n\n    /*!\n    @brief unget current character (read it again on next get)\n\n    We implement unget by setting variable next_unget to true. The input is not\n    changed - we just simulate ungetting by modifying chars_read_total,\n    chars_read_current_line, and token_string. The next call to get() will\n    behave as if the unget character is read again.\n    */\n    void unget()\n    {\n        next_unget = true;\n\n        --position.chars_read_total;\n\n        // in case we \"unget\" a newline, we have to also decrement the lines_read\n        if (position.chars_read_current_line == 0)\n        {\n            if (position.lines_read > 0)\n            {\n                --position.lines_read;\n            }\n        }\n        else\n        {\n            --position.chars_read_current_line;\n        }\n\n        if (JSON_HEDLEY_LIKELY(current != char_traits<char_type>::eof()))\n        {\n            JSON_ASSERT(!token_string.empty());\n            token_string.pop_back();\n        }\n    }\n\n    /// add a character to token_buffer\n    void add(char_int_type c)\n    {\n        token_buffer.push_back(static_cast<typename string_t::value_type>(c));\n    }\n\n  public:\n    /////////////////////\n    // value getters\n    /////////////////////\n\n    /// return integer value\n    constexpr number_integer_t get_number_integer() const noexcept\n    {\n        return value_integer;\n    }\n\n    /// return unsigned integer value\n    constexpr number_unsigned_t get_number_unsigned() const noexcept\n    {\n        return value_unsigned;\n    }\n\n    /// return floating-point value\n    constexpr number_float_t get_number_float() const noexcept\n    {\n        return value_float;\n    }\n\n    /// return current string value (implicitly resets the token; useful only once)\n    string_t& get_string()\n    {\n        return token_buffer;\n    }\n\n    /////////////////////\n    // diagnostics\n    /////////////////////\n\n    /// return position of last read token\n    constexpr position_t get_position() const noexcept\n    {\n        return position;\n    }\n\n    /// return the last read token (for errors only).  Will never contain EOF\n    /// (an arbitrary value that is not a valid char value, often -1), because\n    /// 255 may legitimately occur.  May contain NUL, which should be escaped.\n    std::string get_token_string() const\n    {\n        // escape control characters\n        std::string result;\n        for (const auto c : token_string)\n        {\n            if (static_cast<unsigned char>(c) <= '\\x1F')\n            {\n                // escape control characters\n                std::array<char, 9> cs{{}};\n                static_cast<void>((std::snprintf)(cs.data(), cs.size(), \"<U+%.4X>\", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n                result += cs.data();\n            }\n            else\n            {\n                // add character as is\n                result.push_back(static_cast<std::string::value_type>(c));\n            }\n        }\n\n        return result;\n    }\n\n    /// return syntax error message\n    JSON_HEDLEY_RETURNS_NON_NULL\n    constexpr const char* get_error_message() const noexcept\n    {\n        return error_message;\n    }\n\n    /////////////////////\n    // actual scanner\n    /////////////////////\n\n    /*!\n    @brief skip the UTF-8 byte order mark\n    @return true iff there is no BOM or the correct BOM has been skipped\n    */\n    bool skip_bom()\n    {\n        if (get() == 0xEF)\n        {\n            // check if we completely parse the BOM\n            return get() == 0xBB && get() == 0xBF;\n        }\n\n        // the first character is not the beginning of the BOM; unget it to\n        // process is later\n        unget();\n        return true;\n    }\n\n    void skip_whitespace()\n    {\n        do\n        {\n            get();\n        }\n        while (current == ' ' || current == '\\t' || current == '\\n' || current == '\\r');\n    }\n\n    token_type scan()\n    {\n        // initially, skip the BOM\n        if (position.chars_read_total == 0 && !skip_bom())\n        {\n            error_message = \"invalid BOM; must be 0xEF 0xBB 0xBF if given\";\n            return token_type::parse_error;\n        }\n\n        // read next character and ignore whitespace\n        skip_whitespace();\n\n        // ignore comments\n        while (ignore_comments && current == '/')\n        {\n            if (!scan_comment())\n            {\n                return token_type::parse_error;\n            }\n\n            // skip following whitespace\n            skip_whitespace();\n        }\n\n        switch (current)\n        {\n            // structural characters\n            case '[':\n                return token_type::begin_array;\n            case ']':\n                return token_type::end_array;\n            case '{':\n                return token_type::begin_object;\n            case '}':\n                return token_type::end_object;\n            case ':':\n                return token_type::name_separator;\n            case ',':\n                return token_type::value_separator;\n\n            // literals\n            case 't':\n            {\n                std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};\n                return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);\n            }\n            case 'f':\n            {\n                std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}};\n                return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);\n            }\n            case 'n':\n            {\n                std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};\n                return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);\n            }\n\n            // string\n            case '\\\"':\n                return scan_string();\n\n            // number\n            case '-':\n            case '0':\n            case '1':\n            case '2':\n            case '3':\n            case '4':\n            case '5':\n            case '6':\n            case '7':\n            case '8':\n            case '9':\n                return scan_number();\n\n            // end of input (the null byte is needed when parsing from\n            // string literals)\n            case '\\0':\n            case char_traits<char_type>::eof():\n                return token_type::end_of_input;\n\n            // error\n            default:\n                error_message = \"invalid literal\";\n                return token_type::parse_error;\n        }\n    }\n\n  private:\n    /// input adapter\n    InputAdapterType ia;\n\n    /// whether comments should be ignored (true) or signaled as errors (false)\n    const bool ignore_comments = false;\n\n    /// the current character\n    char_int_type current = char_traits<char_type>::eof();\n\n    /// whether the next get() call should just return current\n    bool next_unget = false;\n\n    /// the start position of the current token\n    position_t position {};\n\n    /// raw input token string (for error messages)\n    std::vector<char_type> token_string {};\n\n    /// buffer for variable-length tokens (numbers, strings)\n    string_t token_buffer {};\n\n    /// a description of occurred lexer errors\n    const char* error_message = \"\";\n\n    // number values\n    number_integer_t value_integer = 0;\n    number_unsigned_t value_unsigned = 0;\n    number_float_t value_float = 0;\n\n    /// the decimal point\n    const char_int_type decimal_point_char = '.';\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/is_sax.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstdint> // size_t\n#include <utility> // declval\n#include <string> // string\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/meta/detected.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename T>\nusing null_function_t = decltype(std::declval<T&>().null());\n\ntemplate<typename T>\nusing boolean_function_t =\n    decltype(std::declval<T&>().boolean(std::declval<bool>()));\n\ntemplate<typename T, typename Integer>\nusing number_integer_function_t =\n    decltype(std::declval<T&>().number_integer(std::declval<Integer>()));\n\ntemplate<typename T, typename Unsigned>\nusing number_unsigned_function_t =\n    decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));\n\ntemplate<typename T, typename Float, typename String>\nusing number_float_function_t = decltype(std::declval<T&>().number_float(\n                                    std::declval<Float>(), std::declval<const String&>()));\n\ntemplate<typename T, typename String>\nusing string_function_t =\n    decltype(std::declval<T&>().string(std::declval<String&>()));\n\ntemplate<typename T, typename Binary>\nusing binary_function_t =\n    decltype(std::declval<T&>().binary(std::declval<Binary&>()));\n\ntemplate<typename T>\nusing start_object_function_t =\n    decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));\n\ntemplate<typename T, typename String>\nusing key_function_t =\n    decltype(std::declval<T&>().key(std::declval<String&>()));\n\ntemplate<typename T>\nusing end_object_function_t = decltype(std::declval<T&>().end_object());\n\ntemplate<typename T>\nusing start_array_function_t =\n    decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));\n\ntemplate<typename T>\nusing end_array_function_t = decltype(std::declval<T&>().end_array());\n\ntemplate<typename T, typename Exception>\nusing parse_error_function_t = decltype(std::declval<T&>().parse_error(\n        std::declval<std::size_t>(), std::declval<const std::string&>(),\n        std::declval<const Exception&>()));\n\ntemplate<typename SAX, typename BasicJsonType>\nstruct is_sax\n{\n  private:\n    static_assert(is_basic_json<BasicJsonType>::value,\n                  \"BasicJsonType must be of type basic_json<...>\");\n\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n    using exception_t = typename BasicJsonType::exception;\n\n  public:\n    static constexpr bool value =\n        is_detected_exact<bool, null_function_t, SAX>::value &&\n        is_detected_exact<bool, boolean_function_t, SAX>::value &&\n        is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value &&\n        is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value &&\n        is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value &&\n        is_detected_exact<bool, string_function_t, SAX, string_t>::value &&\n        is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&\n        is_detected_exact<bool, start_object_function_t, SAX>::value &&\n        is_detected_exact<bool, key_function_t, SAX, string_t>::value &&\n        is_detected_exact<bool, end_object_function_t, SAX>::value &&\n        is_detected_exact<bool, start_array_function_t, SAX>::value &&\n        is_detected_exact<bool, end_array_function_t, SAX>::value &&\n        is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;\n};\n\ntemplate<typename SAX, typename BasicJsonType>\nstruct is_sax_static_asserts\n{\n  private:\n    static_assert(is_basic_json<BasicJsonType>::value,\n                  \"BasicJsonType must be of type basic_json<...>\");\n\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n    using exception_t = typename BasicJsonType::exception;\n\n  public:\n    static_assert(is_detected_exact<bool, null_function_t, SAX>::value,\n                  \"Missing/invalid function: bool null()\");\n    static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,\n                  \"Missing/invalid function: bool boolean(bool)\");\n    static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,\n                  \"Missing/invalid function: bool boolean(bool)\");\n    static_assert(\n        is_detected_exact<bool, number_integer_function_t, SAX,\n        number_integer_t>::value,\n        \"Missing/invalid function: bool number_integer(number_integer_t)\");\n    static_assert(\n        is_detected_exact<bool, number_unsigned_function_t, SAX,\n        number_unsigned_t>::value,\n        \"Missing/invalid function: bool number_unsigned(number_unsigned_t)\");\n    static_assert(is_detected_exact<bool, number_float_function_t, SAX,\n                  number_float_t, string_t>::value,\n                  \"Missing/invalid function: bool number_float(number_float_t, const string_t&)\");\n    static_assert(\n        is_detected_exact<bool, string_function_t, SAX, string_t>::value,\n        \"Missing/invalid function: bool string(string_t&)\");\n    static_assert(\n        is_detected_exact<bool, binary_function_t, SAX, binary_t>::value,\n        \"Missing/invalid function: bool binary(binary_t&)\");\n    static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value,\n                  \"Missing/invalid function: bool start_object(std::size_t)\");\n    static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value,\n                  \"Missing/invalid function: bool key(string_t&)\");\n    static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value,\n                  \"Missing/invalid function: bool end_object()\");\n    static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value,\n                  \"Missing/invalid function: bool start_array(std::size_t)\");\n    static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value,\n                  \"Missing/invalid function: bool end_array()\");\n    static_assert(\n        is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,\n        \"Missing/invalid function: bool parse_error(std::size_t, const \"\n        \"std::string&, const exception&)\");\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/// how to treat CBOR tags\nenum class cbor_tag_handler_t\n{\n    error,   ///< throw a parse_error exception in case of a tag\n    ignore,  ///< ignore tags\n    store    ///< store tags as binary type\n};\n\n/*!\n@brief determine system byte order\n\n@return true if and only if system's byte order is little endian\n\n@note from https://stackoverflow.com/a/1001328/266378\n*/\nstatic inline bool little_endianness(int num = 1) noexcept\n{\n    return *reinterpret_cast<char*>(&num) == 1;\n}\n\n///////////////////\n// binary reader //\n///////////////////\n\n/*!\n@brief deserialization of CBOR, MessagePack, and UBJSON values\n*/\ntemplate<typename BasicJsonType, typename InputAdapterType, typename SAX = json_sax_dom_parser<BasicJsonType>>\nclass binary_reader\n{\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n    using json_sax_t = SAX;\n    using char_type = typename InputAdapterType::char_type;\n    using char_int_type = typename char_traits<char_type>::int_type;\n\n  public:\n    /*!\n    @brief create a binary reader\n\n    @param[in] adapter  input adapter to read from\n    */\n    explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format)\n    {\n        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};\n    }\n\n    // make class move-only\n    binary_reader(const binary_reader&) = delete;\n    binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    binary_reader& operator=(const binary_reader&) = delete;\n    binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)\n    ~binary_reader() = default;\n\n    /*!\n    @param[in] format  the binary format to parse\n    @param[in] sax_    a SAX event processor\n    @param[in] strict  whether to expect the input to be consumed completed\n    @param[in] tag_handler  how to treat CBOR tags\n\n    @return whether parsing was successful\n    */\n    JSON_HEDLEY_NON_NULL(3)\n    bool sax_parse(const input_format_t format,\n                   json_sax_t* sax_,\n                   const bool strict = true,\n                   const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)\n    {\n        sax = sax_;\n        bool result = false;\n\n        switch (format)\n        {\n            case input_format_t::bson:\n                result = parse_bson_internal();\n                break;\n\n            case input_format_t::cbor:\n                result = parse_cbor_internal(true, tag_handler);\n                break;\n\n            case input_format_t::msgpack:\n                result = parse_msgpack_internal();\n                break;\n\n            case input_format_t::ubjson:\n            case input_format_t::bjdata:\n                result = parse_ubjson_internal();\n                break;\n\n            case input_format_t::json: // LCOV_EXCL_LINE\n            default:            // LCOV_EXCL_LINE\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        }\n\n        // strict mode: next byte must be EOF\n        if (result && strict)\n        {\n            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)\n            {\n                get_ignore_noop();\n            }\n            else\n            {\n                get();\n            }\n\n            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))\n            {\n                return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read,\n                                        exception_message(input_format, concat(\"expected end of input; last byte: 0x\", get_token_string()), \"value\"), nullptr));\n            }\n        }\n\n        return result;\n    }\n\n  private:\n    //////////\n    // BSON //\n    //////////\n\n    /*!\n    @brief Reads in a BSON-object and passes it to the SAX-parser.\n    @return whether a valid BSON-value was passed to the SAX parser\n    */\n    bool parse_bson_internal()\n    {\n        std::int32_t document_size{};\n        get_number<std::int32_t, true>(input_format_t::bson, document_size);\n\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))\n        {\n            return false;\n        }\n\n        if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false)))\n        {\n            return false;\n        }\n\n        return sax->end_object();\n    }\n\n    /*!\n    @brief Parses a C-style string from the BSON input.\n    @param[in,out] result  A reference to the string variable where the read\n                            string is to be stored.\n    @return `true` if the \\x00-byte indicating the end of the string was\n             encountered before the EOF; false` indicates an unexpected EOF.\n    */\n    bool get_bson_cstr(string_t& result)\n    {\n        auto out = std::back_inserter(result);\n        while (true)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, \"cstring\")))\n            {\n                return false;\n            }\n            if (current == 0x00)\n            {\n                return true;\n            }\n            *out++ = static_cast<typename string_t::value_type>(current);\n        }\n    }\n\n    /*!\n    @brief Parses a zero-terminated string of length @a len from the BSON\n           input.\n    @param[in] len  The length (including the zero-byte at the end) of the\n                    string to be read.\n    @param[in,out] result  A reference to the string variable where the read\n                            string is to be stored.\n    @tparam NumberType The type of the length @a len\n    @pre len >= 1\n    @return `true` if the string was successfully parsed\n    */\n    template<typename NumberType>\n    bool get_bson_string(const NumberType len, string_t& result)\n    {\n        if (JSON_HEDLEY_UNLIKELY(len < 1))\n        {\n            auto last_token = get_token_string();\n            return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                    exception_message(input_format_t::bson, concat(\"string length must be at least 1, is \", std::to_string(len)), \"string\"), nullptr));\n        }\n\n        return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof();\n    }\n\n    /*!\n    @brief Parses a byte array input of length @a len from the BSON input.\n    @param[in] len  The length of the byte array to be read.\n    @param[in,out] result  A reference to the binary variable where the read\n                            array is to be stored.\n    @tparam NumberType The type of the length @a len\n    @pre len >= 0\n    @return `true` if the byte array was successfully parsed\n    */\n    template<typename NumberType>\n    bool get_bson_binary(const NumberType len, binary_t& result)\n    {\n        if (JSON_HEDLEY_UNLIKELY(len < 0))\n        {\n            auto last_token = get_token_string();\n            return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                    exception_message(input_format_t::bson, concat(\"byte array length cannot be negative, is \", std::to_string(len)), \"binary\"), nullptr));\n        }\n\n        // All BSON binary values have a subtype\n        std::uint8_t subtype{};\n        get_number<std::uint8_t>(input_format_t::bson, subtype);\n        result.set_subtype(subtype);\n\n        return get_binary(input_format_t::bson, len, result);\n    }\n\n    /*!\n    @brief Read a BSON document element of the given @a element_type.\n    @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html\n    @param[in] element_type_parse_position The position in the input stream,\n               where the `element_type` was read.\n    @warning Not all BSON element types are supported yet. An unsupported\n             @a element_type will give rise to a parse_error.114:\n             Unsupported BSON record type 0x...\n    @return whether a valid BSON-object/array was passed to the SAX parser\n    */\n    bool parse_bson_element_internal(const char_int_type element_type,\n                                     const std::size_t element_type_parse_position)\n    {\n        switch (element_type)\n        {\n            case 0x01: // double\n            {\n                double number{};\n                return get_number<double, true>(input_format_t::bson, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 0x02: // string\n            {\n                std::int32_t len{};\n                string_t value;\n                return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value);\n            }\n\n            case 0x03: // object\n            {\n                return parse_bson_internal();\n            }\n\n            case 0x04: // array\n            {\n                return parse_bson_array();\n            }\n\n            case 0x05: // binary\n            {\n                std::int32_t len{};\n                binary_t value;\n                return get_number<std::int32_t, true>(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value);\n            }\n\n            case 0x08: // boolean\n            {\n                return sax->boolean(get() != 0);\n            }\n\n            case 0x0A: // null\n            {\n                return sax->null();\n            }\n\n            case 0x10: // int32\n            {\n                std::int32_t value{};\n                return get_number<std::int32_t, true>(input_format_t::bson, value) && sax->number_integer(value);\n            }\n\n            case 0x12: // int64\n            {\n                std::int64_t value{};\n                return get_number<std::int64_t, true>(input_format_t::bson, value) && sax->number_integer(value);\n            }\n\n            default: // anything else not supported (yet)\n            {\n                std::array<char, 3> cr{{}};\n                static_cast<void>((std::snprintf)(cr.data(), cr.size(), \"%.2hhX\", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n                const std::string cr_str{cr.data()};\n                return sax->parse_error(element_type_parse_position, cr_str,\n                                        parse_error::create(114, element_type_parse_position, concat(\"Unsupported BSON record type 0x\", cr_str), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @brief Read a BSON element list (as specified in the BSON-spec)\n\n    The same binary layout is used for objects and arrays, hence it must be\n    indicated with the argument @a is_array which one is expected\n    (true --> array, false --> object).\n\n    @param[in] is_array Determines if the element list being read is to be\n                        treated as an object (@a is_array == false), or as an\n                        array (@a is_array == true).\n    @return whether a valid BSON-object/array was passed to the SAX parser\n    */\n    bool parse_bson_element_list(const bool is_array)\n    {\n        string_t key;\n\n        while (auto element_type = get())\n        {\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, \"element list\")))\n            {\n                return false;\n            }\n\n            const std::size_t element_type_parse_position = chars_read;\n            if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key)))\n            {\n                return false;\n            }\n\n            if (!is_array && !sax->key(key))\n            {\n                return false;\n            }\n\n            if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position)))\n            {\n                return false;\n            }\n\n            // get_bson_cstr only appends\n            key.clear();\n        }\n\n        return true;\n    }\n\n    /*!\n    @brief Reads an array from the BSON input and passes it to the SAX-parser.\n    @return whether a valid BSON-array was passed to the SAX parser\n    */\n    bool parse_bson_array()\n    {\n        std::int32_t document_size{};\n        get_number<std::int32_t, true>(input_format_t::bson, document_size);\n\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))\n        {\n            return false;\n        }\n\n        if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true)))\n        {\n            return false;\n        }\n\n        return sax->end_array();\n    }\n\n    //////////\n    // CBOR //\n    //////////\n\n    /*!\n    @param[in] get_char  whether a new character should be retrieved from the\n                         input (true) or whether the last read character should\n                         be considered instead (false)\n    @param[in] tag_handler how CBOR tags should be treated\n\n    @return whether a valid CBOR value was passed to the SAX parser\n    */\n    bool parse_cbor_internal(const bool get_char,\n                             const cbor_tag_handler_t tag_handler)\n    {\n        switch (get_char ? get() : current)\n        {\n            // EOF\n            case char_traits<char_type>::eof():\n                return unexpect_eof(input_format_t::cbor, \"value\");\n\n            // Integer 0x00..0x17 (0..23)\n            case 0x00:\n            case 0x01:\n            case 0x02:\n            case 0x03:\n            case 0x04:\n            case 0x05:\n            case 0x06:\n            case 0x07:\n            case 0x08:\n            case 0x09:\n            case 0x0A:\n            case 0x0B:\n            case 0x0C:\n            case 0x0D:\n            case 0x0E:\n            case 0x0F:\n            case 0x10:\n            case 0x11:\n            case 0x12:\n            case 0x13:\n            case 0x14:\n            case 0x15:\n            case 0x16:\n            case 0x17:\n                return sax->number_unsigned(static_cast<number_unsigned_t>(current));\n\n            case 0x18: // Unsigned integer (one-byte uint8_t follows)\n            {\n                std::uint8_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);\n            }\n\n            case 0x19: // Unsigned integer (two-byte uint16_t follows)\n            {\n                std::uint16_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);\n            }\n\n            case 0x1A: // Unsigned integer (four-byte uint32_t follows)\n            {\n                std::uint32_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);\n            }\n\n            case 0x1B: // Unsigned integer (eight-byte uint64_t follows)\n            {\n                std::uint64_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_unsigned(number);\n            }\n\n            // Negative integer -1-0x00..-1-0x17 (-1..-24)\n            case 0x20:\n            case 0x21:\n            case 0x22:\n            case 0x23:\n            case 0x24:\n            case 0x25:\n            case 0x26:\n            case 0x27:\n            case 0x28:\n            case 0x29:\n            case 0x2A:\n            case 0x2B:\n            case 0x2C:\n            case 0x2D:\n            case 0x2E:\n            case 0x2F:\n            case 0x30:\n            case 0x31:\n            case 0x32:\n            case 0x33:\n            case 0x34:\n            case 0x35:\n            case 0x36:\n            case 0x37:\n                return sax->number_integer(static_cast<std::int8_t>(0x20 - 1 - current));\n\n            case 0x38: // Negative integer (one-byte uint8_t follows)\n            {\n                std::uint8_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);\n            }\n\n            case 0x39: // Negative integer -1-n (two-byte uint16_t follows)\n            {\n                std::uint16_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);\n            }\n\n            case 0x3A: // Negative integer -1-n (four-byte uint32_t follows)\n            {\n                std::uint32_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - number);\n            }\n\n            case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows)\n            {\n                std::uint64_t number{};\n                return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1)\n                        - static_cast<number_integer_t>(number));\n            }\n\n            // Binary data (0x00..0x17 bytes follow)\n            case 0x40:\n            case 0x41:\n            case 0x42:\n            case 0x43:\n            case 0x44:\n            case 0x45:\n            case 0x46:\n            case 0x47:\n            case 0x48:\n            case 0x49:\n            case 0x4A:\n            case 0x4B:\n            case 0x4C:\n            case 0x4D:\n            case 0x4E:\n            case 0x4F:\n            case 0x50:\n            case 0x51:\n            case 0x52:\n            case 0x53:\n            case 0x54:\n            case 0x55:\n            case 0x56:\n            case 0x57:\n            case 0x58: // Binary data (one-byte uint8_t for n follows)\n            case 0x59: // Binary data (two-byte uint16_t for n follow)\n            case 0x5A: // Binary data (four-byte uint32_t for n follow)\n            case 0x5B: // Binary data (eight-byte uint64_t for n follow)\n            case 0x5F: // Binary data (indefinite length)\n            {\n                binary_t b;\n                return get_cbor_binary(b) && sax->binary(b);\n            }\n\n            // UTF-8 string (0x00..0x17 bytes follow)\n            case 0x60:\n            case 0x61:\n            case 0x62:\n            case 0x63:\n            case 0x64:\n            case 0x65:\n            case 0x66:\n            case 0x67:\n            case 0x68:\n            case 0x69:\n            case 0x6A:\n            case 0x6B:\n            case 0x6C:\n            case 0x6D:\n            case 0x6E:\n            case 0x6F:\n            case 0x70:\n            case 0x71:\n            case 0x72:\n            case 0x73:\n            case 0x74:\n            case 0x75:\n            case 0x76:\n            case 0x77:\n            case 0x78: // UTF-8 string (one-byte uint8_t for n follows)\n            case 0x79: // UTF-8 string (two-byte uint16_t for n follow)\n            case 0x7A: // UTF-8 string (four-byte uint32_t for n follow)\n            case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow)\n            case 0x7F: // UTF-8 string (indefinite length)\n            {\n                string_t s;\n                return get_cbor_string(s) && sax->string(s);\n            }\n\n            // array (0x00..0x17 data items follow)\n            case 0x80:\n            case 0x81:\n            case 0x82:\n            case 0x83:\n            case 0x84:\n            case 0x85:\n            case 0x86:\n            case 0x87:\n            case 0x88:\n            case 0x89:\n            case 0x8A:\n            case 0x8B:\n            case 0x8C:\n            case 0x8D:\n            case 0x8E:\n            case 0x8F:\n            case 0x90:\n            case 0x91:\n            case 0x92:\n            case 0x93:\n            case 0x94:\n            case 0x95:\n            case 0x96:\n            case 0x97:\n                return get_cbor_array(\n                           conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);\n\n            case 0x98: // array (one-byte uint8_t for n follows)\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0x99: // array (two-byte uint16_t for n follow)\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0x9A: // array (four-byte uint32_t for n follow)\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0x9B: // array (eight-byte uint64_t for n follow)\n            {\n                std::uint64_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0x9F: // array (indefinite length)\n                return get_cbor_array(static_cast<std::size_t>(-1), tag_handler);\n\n            // map (0x00..0x17 pairs of data items follow)\n            case 0xA0:\n            case 0xA1:\n            case 0xA2:\n            case 0xA3:\n            case 0xA4:\n            case 0xA5:\n            case 0xA6:\n            case 0xA7:\n            case 0xA8:\n            case 0xA9:\n            case 0xAA:\n            case 0xAB:\n            case 0xAC:\n            case 0xAD:\n            case 0xAE:\n            case 0xAF:\n            case 0xB0:\n            case 0xB1:\n            case 0xB2:\n            case 0xB3:\n            case 0xB4:\n            case 0xB5:\n            case 0xB6:\n            case 0xB7:\n                return get_cbor_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);\n\n            case 0xB8: // map (one-byte uint8_t for n follows)\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0xB9: // map (two-byte uint16_t for n follow)\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0xBA: // map (four-byte uint32_t for n follow)\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0xBB: // map (eight-byte uint64_t for n follow)\n            {\n                std::uint64_t len{};\n                return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast<std::size_t>(len), tag_handler);\n            }\n\n            case 0xBF: // map (indefinite length)\n                return get_cbor_object(static_cast<std::size_t>(-1), tag_handler);\n\n            case 0xC6: // tagged item\n            case 0xC7:\n            case 0xC8:\n            case 0xC9:\n            case 0xCA:\n            case 0xCB:\n            case 0xCC:\n            case 0xCD:\n            case 0xCE:\n            case 0xCF:\n            case 0xD0:\n            case 0xD1:\n            case 0xD2:\n            case 0xD3:\n            case 0xD4:\n            case 0xD8: // tagged item (1 bytes follow)\n            case 0xD9: // tagged item (2 bytes follow)\n            case 0xDA: // tagged item (4 bytes follow)\n            case 0xDB: // tagged item (8 bytes follow)\n            {\n                switch (tag_handler)\n                {\n                    case cbor_tag_handler_t::error:\n                    {\n                        auto last_token = get_token_string();\n                        return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                                exception_message(input_format_t::cbor, concat(\"invalid byte: 0x\", last_token), \"value\"), nullptr));\n                    }\n\n                    case cbor_tag_handler_t::ignore:\n                    {\n                        // ignore binary subtype\n                        switch (current)\n                        {\n                            case 0xD8:\n                            {\n                                std::uint8_t subtype_to_ignore{};\n                                get_number(input_format_t::cbor, subtype_to_ignore);\n                                break;\n                            }\n                            case 0xD9:\n                            {\n                                std::uint16_t subtype_to_ignore{};\n                                get_number(input_format_t::cbor, subtype_to_ignore);\n                                break;\n                            }\n                            case 0xDA:\n                            {\n                                std::uint32_t subtype_to_ignore{};\n                                get_number(input_format_t::cbor, subtype_to_ignore);\n                                break;\n                            }\n                            case 0xDB:\n                            {\n                                std::uint64_t subtype_to_ignore{};\n                                get_number(input_format_t::cbor, subtype_to_ignore);\n                                break;\n                            }\n                            default:\n                                break;\n                        }\n                        return parse_cbor_internal(true, tag_handler);\n                    }\n\n                    case cbor_tag_handler_t::store:\n                    {\n                        binary_t b;\n                        // use binary subtype and store in binary container\n                        switch (current)\n                        {\n                            case 0xD8:\n                            {\n                                std::uint8_t subtype{};\n                                get_number(input_format_t::cbor, subtype);\n                                b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));\n                                break;\n                            }\n                            case 0xD9:\n                            {\n                                std::uint16_t subtype{};\n                                get_number(input_format_t::cbor, subtype);\n                                b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));\n                                break;\n                            }\n                            case 0xDA:\n                            {\n                                std::uint32_t subtype{};\n                                get_number(input_format_t::cbor, subtype);\n                                b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));\n                                break;\n                            }\n                            case 0xDB:\n                            {\n                                std::uint64_t subtype{};\n                                get_number(input_format_t::cbor, subtype);\n                                b.set_subtype(detail::conditional_static_cast<typename binary_t::subtype_type>(subtype));\n                                break;\n                            }\n                            default:\n                                return parse_cbor_internal(true, tag_handler);\n                        }\n                        get();\n                        return get_cbor_binary(b) && sax->binary(b);\n                    }\n\n                    default:                 // LCOV_EXCL_LINE\n                        JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n                        return false;        // LCOV_EXCL_LINE\n                }\n            }\n\n            case 0xF4: // false\n                return sax->boolean(false);\n\n            case 0xF5: // true\n                return sax->boolean(true);\n\n            case 0xF6: // null\n                return sax->null();\n\n            case 0xF9: // Half-Precision Float (two-byte IEEE 754)\n            {\n                const auto byte1_raw = get();\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, \"number\")))\n                {\n                    return false;\n                }\n                const auto byte2_raw = get();\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, \"number\")))\n                {\n                    return false;\n                }\n\n                const auto byte1 = static_cast<unsigned char>(byte1_raw);\n                const auto byte2 = static_cast<unsigned char>(byte2_raw);\n\n                // code from RFC 7049, Appendix D, Figure 3:\n                // As half-precision floating-point numbers were only added\n                // to IEEE 754 in 2008, today's programming platforms often\n                // still only have limited support for them. It is very\n                // easy to include at least decoding support for them even\n                // without such support. An example of a small decoder for\n                // half-precision floating-point numbers in the C language\n                // is shown in Fig. 3.\n                const auto half = static_cast<unsigned int>((byte1 << 8u) + byte2);\n                const double val = [&half]\n                {\n                    const int exp = (half >> 10u) & 0x1Fu;\n                    const unsigned int mant = half & 0x3FFu;\n                    JSON_ASSERT(0 <= exp&& exp <= 32);\n                    JSON_ASSERT(mant <= 1024);\n                    switch (exp)\n                    {\n                        case 0:\n                            return std::ldexp(mant, -24);\n                        case 31:\n                            return (mant == 0)\n                            ? std::numeric_limits<double>::infinity()\n                            : std::numeric_limits<double>::quiet_NaN();\n                        default:\n                            return std::ldexp(mant + 1024, exp - 25);\n                    }\n                }();\n                return sax->number_float((half & 0x8000u) != 0\n                                         ? static_cast<number_float_t>(-val)\n                                         : static_cast<number_float_t>(val), \"\");\n            }\n\n            case 0xFA: // Single-Precision Float (four-byte IEEE 754)\n            {\n                float number{};\n                return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 0xFB: // Double-Precision Float (eight-byte IEEE 754)\n            {\n                double number{};\n                return get_number(input_format_t::cbor, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            default: // anything else (0xFF is handled inside the other types)\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                        exception_message(input_format_t::cbor, concat(\"invalid byte: 0x\", last_token), \"value\"), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @brief reads a CBOR string\n\n    This function first reads starting bytes to determine the expected\n    string length and then copies this number of bytes into a string.\n    Additionally, CBOR's strings with indefinite lengths are supported.\n\n    @param[out] result  created string\n\n    @return whether string creation completed\n    */\n    bool get_cbor_string(string_t& result)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, \"string\")))\n        {\n            return false;\n        }\n\n        switch (current)\n        {\n            // UTF-8 string (0x00..0x17 bytes follow)\n            case 0x60:\n            case 0x61:\n            case 0x62:\n            case 0x63:\n            case 0x64:\n            case 0x65:\n            case 0x66:\n            case 0x67:\n            case 0x68:\n            case 0x69:\n            case 0x6A:\n            case 0x6B:\n            case 0x6C:\n            case 0x6D:\n            case 0x6E:\n            case 0x6F:\n            case 0x70:\n            case 0x71:\n            case 0x72:\n            case 0x73:\n            case 0x74:\n            case 0x75:\n            case 0x76:\n            case 0x77:\n            {\n                return get_string(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result);\n            }\n\n            case 0x78: // UTF-8 string (one-byte uint8_t for n follows)\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);\n            }\n\n            case 0x79: // UTF-8 string (two-byte uint16_t for n follow)\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);\n            }\n\n            case 0x7A: // UTF-8 string (four-byte uint32_t for n follow)\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);\n            }\n\n            case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow)\n            {\n                std::uint64_t len{};\n                return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result);\n            }\n\n            case 0x7F: // UTF-8 string (indefinite length)\n            {\n                while (get() != 0xFF)\n                {\n                    string_t chunk;\n                    if (!get_cbor_string(chunk))\n                    {\n                        return false;\n                    }\n                    result.append(chunk);\n                }\n                return true;\n            }\n\n            default:\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,\n                                        exception_message(input_format_t::cbor, concat(\"expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x\", last_token), \"string\"), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @brief reads a CBOR byte array\n\n    This function first reads starting bytes to determine the expected\n    byte array length and then copies this number of bytes into the byte array.\n    Additionally, CBOR's byte arrays with indefinite lengths are supported.\n\n    @param[out] result  created byte array\n\n    @return whether byte array creation completed\n    */\n    bool get_cbor_binary(binary_t& result)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, \"binary\")))\n        {\n            return false;\n        }\n\n        switch (current)\n        {\n            // Binary data (0x00..0x17 bytes follow)\n            case 0x40:\n            case 0x41:\n            case 0x42:\n            case 0x43:\n            case 0x44:\n            case 0x45:\n            case 0x46:\n            case 0x47:\n            case 0x48:\n            case 0x49:\n            case 0x4A:\n            case 0x4B:\n            case 0x4C:\n            case 0x4D:\n            case 0x4E:\n            case 0x4F:\n            case 0x50:\n            case 0x51:\n            case 0x52:\n            case 0x53:\n            case 0x54:\n            case 0x55:\n            case 0x56:\n            case 0x57:\n            {\n                return get_binary(input_format_t::cbor, static_cast<unsigned int>(current) & 0x1Fu, result);\n            }\n\n            case 0x58: // Binary data (one-byte uint8_t for n follows)\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::cbor, len) &&\n                       get_binary(input_format_t::cbor, len, result);\n            }\n\n            case 0x59: // Binary data (two-byte uint16_t for n follow)\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::cbor, len) &&\n                       get_binary(input_format_t::cbor, len, result);\n            }\n\n            case 0x5A: // Binary data (four-byte uint32_t for n follow)\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::cbor, len) &&\n                       get_binary(input_format_t::cbor, len, result);\n            }\n\n            case 0x5B: // Binary data (eight-byte uint64_t for n follow)\n            {\n                std::uint64_t len{};\n                return get_number(input_format_t::cbor, len) &&\n                       get_binary(input_format_t::cbor, len, result);\n            }\n\n            case 0x5F: // Binary data (indefinite length)\n            {\n                while (get() != 0xFF)\n                {\n                    binary_t chunk;\n                    if (!get_cbor_binary(chunk))\n                    {\n                        return false;\n                    }\n                    result.insert(result.end(), chunk.begin(), chunk.end());\n                }\n                return true;\n            }\n\n            default:\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,\n                                        exception_message(input_format_t::cbor, concat(\"expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x\", last_token), \"binary\"), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @param[in] len  the length of the array or static_cast<std::size_t>(-1) for an\n                    array of indefinite size\n    @param[in] tag_handler how CBOR tags should be treated\n    @return whether array creation completed\n    */\n    bool get_cbor_array(const std::size_t len,\n                        const cbor_tag_handler_t tag_handler)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))\n        {\n            return false;\n        }\n\n        if (len != static_cast<std::size_t>(-1))\n        {\n            for (std::size_t i = 0; i < len; ++i)\n            {\n                if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))\n                {\n                    return false;\n                }\n            }\n        }\n        else\n        {\n            while (get() != 0xFF)\n            {\n                if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler)))\n                {\n                    return false;\n                }\n            }\n        }\n\n        return sax->end_array();\n    }\n\n    /*!\n    @param[in] len  the length of the object or static_cast<std::size_t>(-1) for an\n                    object of indefinite size\n    @param[in] tag_handler how CBOR tags should be treated\n    @return whether object creation completed\n    */\n    bool get_cbor_object(const std::size_t len,\n                         const cbor_tag_handler_t tag_handler)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))\n        {\n            return false;\n        }\n\n        if (len != 0)\n        {\n            string_t key;\n            if (len != static_cast<std::size_t>(-1))\n            {\n                for (std::size_t i = 0; i < len; ++i)\n                {\n                    get();\n                    if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key)))\n                    {\n                        return false;\n                    }\n\n                    if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))\n                    {\n                        return false;\n                    }\n                    key.clear();\n                }\n            }\n            else\n            {\n                while (get() != 0xFF)\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key)))\n                    {\n                        return false;\n                    }\n\n                    if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler)))\n                    {\n                        return false;\n                    }\n                    key.clear();\n                }\n            }\n        }\n\n        return sax->end_object();\n    }\n\n    /////////////\n    // MsgPack //\n    /////////////\n\n    /*!\n    @return whether a valid MessagePack value was passed to the SAX parser\n    */\n    bool parse_msgpack_internal()\n    {\n        switch (get())\n        {\n            // EOF\n            case char_traits<char_type>::eof():\n                return unexpect_eof(input_format_t::msgpack, \"value\");\n\n            // positive fixint\n            case 0x00:\n            case 0x01:\n            case 0x02:\n            case 0x03:\n            case 0x04:\n            case 0x05:\n            case 0x06:\n            case 0x07:\n            case 0x08:\n            case 0x09:\n            case 0x0A:\n            case 0x0B:\n            case 0x0C:\n            case 0x0D:\n            case 0x0E:\n            case 0x0F:\n            case 0x10:\n            case 0x11:\n            case 0x12:\n            case 0x13:\n            case 0x14:\n            case 0x15:\n            case 0x16:\n            case 0x17:\n            case 0x18:\n            case 0x19:\n            case 0x1A:\n            case 0x1B:\n            case 0x1C:\n            case 0x1D:\n            case 0x1E:\n            case 0x1F:\n            case 0x20:\n            case 0x21:\n            case 0x22:\n            case 0x23:\n            case 0x24:\n            case 0x25:\n            case 0x26:\n            case 0x27:\n            case 0x28:\n            case 0x29:\n            case 0x2A:\n            case 0x2B:\n            case 0x2C:\n            case 0x2D:\n            case 0x2E:\n            case 0x2F:\n            case 0x30:\n            case 0x31:\n            case 0x32:\n            case 0x33:\n            case 0x34:\n            case 0x35:\n            case 0x36:\n            case 0x37:\n            case 0x38:\n            case 0x39:\n            case 0x3A:\n            case 0x3B:\n            case 0x3C:\n            case 0x3D:\n            case 0x3E:\n            case 0x3F:\n            case 0x40:\n            case 0x41:\n            case 0x42:\n            case 0x43:\n            case 0x44:\n            case 0x45:\n            case 0x46:\n            case 0x47:\n            case 0x48:\n            case 0x49:\n            case 0x4A:\n            case 0x4B:\n            case 0x4C:\n            case 0x4D:\n            case 0x4E:\n            case 0x4F:\n            case 0x50:\n            case 0x51:\n            case 0x52:\n            case 0x53:\n            case 0x54:\n            case 0x55:\n            case 0x56:\n            case 0x57:\n            case 0x58:\n            case 0x59:\n            case 0x5A:\n            case 0x5B:\n            case 0x5C:\n            case 0x5D:\n            case 0x5E:\n            case 0x5F:\n            case 0x60:\n            case 0x61:\n            case 0x62:\n            case 0x63:\n            case 0x64:\n            case 0x65:\n            case 0x66:\n            case 0x67:\n            case 0x68:\n            case 0x69:\n            case 0x6A:\n            case 0x6B:\n            case 0x6C:\n            case 0x6D:\n            case 0x6E:\n            case 0x6F:\n            case 0x70:\n            case 0x71:\n            case 0x72:\n            case 0x73:\n            case 0x74:\n            case 0x75:\n            case 0x76:\n            case 0x77:\n            case 0x78:\n            case 0x79:\n            case 0x7A:\n            case 0x7B:\n            case 0x7C:\n            case 0x7D:\n            case 0x7E:\n            case 0x7F:\n                return sax->number_unsigned(static_cast<number_unsigned_t>(current));\n\n            // fixmap\n            case 0x80:\n            case 0x81:\n            case 0x82:\n            case 0x83:\n            case 0x84:\n            case 0x85:\n            case 0x86:\n            case 0x87:\n            case 0x88:\n            case 0x89:\n            case 0x8A:\n            case 0x8B:\n            case 0x8C:\n            case 0x8D:\n            case 0x8E:\n            case 0x8F:\n                return get_msgpack_object(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu));\n\n            // fixarray\n            case 0x90:\n            case 0x91:\n            case 0x92:\n            case 0x93:\n            case 0x94:\n            case 0x95:\n            case 0x96:\n            case 0x97:\n            case 0x98:\n            case 0x99:\n            case 0x9A:\n            case 0x9B:\n            case 0x9C:\n            case 0x9D:\n            case 0x9E:\n            case 0x9F:\n                return get_msgpack_array(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x0Fu));\n\n            // fixstr\n            case 0xA0:\n            case 0xA1:\n            case 0xA2:\n            case 0xA3:\n            case 0xA4:\n            case 0xA5:\n            case 0xA6:\n            case 0xA7:\n            case 0xA8:\n            case 0xA9:\n            case 0xAA:\n            case 0xAB:\n            case 0xAC:\n            case 0xAD:\n            case 0xAE:\n            case 0xAF:\n            case 0xB0:\n            case 0xB1:\n            case 0xB2:\n            case 0xB3:\n            case 0xB4:\n            case 0xB5:\n            case 0xB6:\n            case 0xB7:\n            case 0xB8:\n            case 0xB9:\n            case 0xBA:\n            case 0xBB:\n            case 0xBC:\n            case 0xBD:\n            case 0xBE:\n            case 0xBF:\n            case 0xD9: // str 8\n            case 0xDA: // str 16\n            case 0xDB: // str 32\n            {\n                string_t s;\n                return get_msgpack_string(s) && sax->string(s);\n            }\n\n            case 0xC0: // nil\n                return sax->null();\n\n            case 0xC2: // false\n                return sax->boolean(false);\n\n            case 0xC3: // true\n                return sax->boolean(true);\n\n            case 0xC4: // bin 8\n            case 0xC5: // bin 16\n            case 0xC6: // bin 32\n            case 0xC7: // ext 8\n            case 0xC8: // ext 16\n            case 0xC9: // ext 32\n            case 0xD4: // fixext 1\n            case 0xD5: // fixext 2\n            case 0xD6: // fixext 4\n            case 0xD7: // fixext 8\n            case 0xD8: // fixext 16\n            {\n                binary_t b;\n                return get_msgpack_binary(b) && sax->binary(b);\n            }\n\n            case 0xCA: // float 32\n            {\n                float number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 0xCB: // float 64\n            {\n                double number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 0xCC: // uint 8\n            {\n                std::uint8_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);\n            }\n\n            case 0xCD: // uint 16\n            {\n                std::uint16_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);\n            }\n\n            case 0xCE: // uint 32\n            {\n                std::uint32_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);\n            }\n\n            case 0xCF: // uint 64\n            {\n                std::uint64_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number);\n            }\n\n            case 0xD0: // int 8\n            {\n                std::int8_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_integer(number);\n            }\n\n            case 0xD1: // int 16\n            {\n                std::int16_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_integer(number);\n            }\n\n            case 0xD2: // int 32\n            {\n                std::int32_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_integer(number);\n            }\n\n            case 0xD3: // int 64\n            {\n                std::int64_t number{};\n                return get_number(input_format_t::msgpack, number) && sax->number_integer(number);\n            }\n\n            case 0xDC: // array 16\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast<std::size_t>(len));\n            }\n\n            case 0xDD: // array 32\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast<std::size_t>(len));\n            }\n\n            case 0xDE: // map 16\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast<std::size_t>(len));\n            }\n\n            case 0xDF: // map 32\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast<std::size_t>(len));\n            }\n\n            // negative fixint\n            case 0xE0:\n            case 0xE1:\n            case 0xE2:\n            case 0xE3:\n            case 0xE4:\n            case 0xE5:\n            case 0xE6:\n            case 0xE7:\n            case 0xE8:\n            case 0xE9:\n            case 0xEA:\n            case 0xEB:\n            case 0xEC:\n            case 0xED:\n            case 0xEE:\n            case 0xEF:\n            case 0xF0:\n            case 0xF1:\n            case 0xF2:\n            case 0xF3:\n            case 0xF4:\n            case 0xF5:\n            case 0xF6:\n            case 0xF7:\n            case 0xF8:\n            case 0xF9:\n            case 0xFA:\n            case 0xFB:\n            case 0xFC:\n            case 0xFD:\n            case 0xFE:\n            case 0xFF:\n                return sax->number_integer(static_cast<std::int8_t>(current));\n\n            default: // anything else\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                        exception_message(input_format_t::msgpack, concat(\"invalid byte: 0x\", last_token), \"value\"), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @brief reads a MessagePack string\n\n    This function first reads starting bytes to determine the expected\n    string length and then copies this number of bytes into a string.\n\n    @param[out] result  created string\n\n    @return whether string creation completed\n    */\n    bool get_msgpack_string(string_t& result)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, \"string\")))\n        {\n            return false;\n        }\n\n        switch (current)\n        {\n            // fixstr\n            case 0xA0:\n            case 0xA1:\n            case 0xA2:\n            case 0xA3:\n            case 0xA4:\n            case 0xA5:\n            case 0xA6:\n            case 0xA7:\n            case 0xA8:\n            case 0xA9:\n            case 0xAA:\n            case 0xAB:\n            case 0xAC:\n            case 0xAD:\n            case 0xAE:\n            case 0xAF:\n            case 0xB0:\n            case 0xB1:\n            case 0xB2:\n            case 0xB3:\n            case 0xB4:\n            case 0xB5:\n            case 0xB6:\n            case 0xB7:\n            case 0xB8:\n            case 0xB9:\n            case 0xBA:\n            case 0xBB:\n            case 0xBC:\n            case 0xBD:\n            case 0xBE:\n            case 0xBF:\n            {\n                return get_string(input_format_t::msgpack, static_cast<unsigned int>(current) & 0x1Fu, result);\n            }\n\n            case 0xD9: // str 8\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);\n            }\n\n            case 0xDA: // str 16\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);\n            }\n\n            case 0xDB: // str 32\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result);\n            }\n\n            default:\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,\n                                        exception_message(input_format_t::msgpack, concat(\"expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x\", last_token), \"string\"), nullptr));\n            }\n        }\n    }\n\n    /*!\n    @brief reads a MessagePack byte array\n\n    This function first reads starting bytes to determine the expected\n    byte array length and then copies this number of bytes into a byte array.\n\n    @param[out] result  created byte array\n\n    @return whether byte array creation completed\n    */\n    bool get_msgpack_binary(binary_t& result)\n    {\n        // helper function to set the subtype\n        auto assign_and_return_true = [&result](std::int8_t subtype)\n        {\n            result.set_subtype(static_cast<std::uint8_t>(subtype));\n            return true;\n        };\n\n        switch (current)\n        {\n            case 0xC4: // bin 8\n            {\n                std::uint8_t len{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_binary(input_format_t::msgpack, len, result);\n            }\n\n            case 0xC5: // bin 16\n            {\n                std::uint16_t len{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_binary(input_format_t::msgpack, len, result);\n            }\n\n            case 0xC6: // bin 32\n            {\n                std::uint32_t len{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_binary(input_format_t::msgpack, len, result);\n            }\n\n            case 0xC7: // ext 8\n            {\n                std::uint8_t len{};\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, len, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xC8: // ext 16\n            {\n                std::uint16_t len{};\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, len, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xC9: // ext 32\n            {\n                std::uint32_t len{};\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, len) &&\n                       get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, len, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xD4: // fixext 1\n            {\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, 1, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xD5: // fixext 2\n            {\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, 2, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xD6: // fixext 4\n            {\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, 4, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xD7: // fixext 8\n            {\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, 8, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            case 0xD8: // fixext 16\n            {\n                std::int8_t subtype{};\n                return get_number(input_format_t::msgpack, subtype) &&\n                       get_binary(input_format_t::msgpack, 16, result) &&\n                       assign_and_return_true(subtype);\n            }\n\n            default:           // LCOV_EXCL_LINE\n                return false;  // LCOV_EXCL_LINE\n        }\n    }\n\n    /*!\n    @param[in] len  the length of the array\n    @return whether array creation completed\n    */\n    bool get_msgpack_array(const std::size_t len)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))\n        {\n            return false;\n        }\n\n        for (std::size_t i = 0; i < len; ++i)\n        {\n            if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal()))\n            {\n                return false;\n            }\n        }\n\n        return sax->end_array();\n    }\n\n    /*!\n    @param[in] len  the length of the object\n    @return whether object creation completed\n    */\n    bool get_msgpack_object(const std::size_t len)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))\n        {\n            return false;\n        }\n\n        string_t key;\n        for (std::size_t i = 0; i < len; ++i)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key)))\n            {\n                return false;\n            }\n\n            if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal()))\n            {\n                return false;\n            }\n            key.clear();\n        }\n\n        return sax->end_object();\n    }\n\n    ////////////\n    // UBJSON //\n    ////////////\n\n    /*!\n    @param[in] get_char  whether a new character should be retrieved from the\n                         input (true, default) or whether the last read\n                         character should be considered instead\n\n    @return whether a valid UBJSON value was passed to the SAX parser\n    */\n    bool parse_ubjson_internal(const bool get_char = true)\n    {\n        return get_ubjson_value(get_char ? get_ignore_noop() : current);\n    }\n\n    /*!\n    @brief reads a UBJSON string\n\n    This function is either called after reading the 'S' byte explicitly\n    indicating a string, or in case of an object key where the 'S' byte can be\n    left out.\n\n    @param[out] result   created string\n    @param[in] get_char  whether a new character should be retrieved from the\n                         input (true, default) or whether the last read\n                         character should be considered instead\n\n    @return whether string creation completed\n    */\n    bool get_ubjson_string(string_t& result, const bool get_char = true)\n    {\n        if (get_char)\n        {\n            get();  // TODO(niels): may we ignore N here?\n        }\n\n        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"value\")))\n        {\n            return false;\n        }\n\n        switch (current)\n        {\n            case 'U':\n            {\n                std::uint8_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'i':\n            {\n                std::int8_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'I':\n            {\n                std::int16_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'l':\n            {\n                std::int32_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'L':\n            {\n                std::int64_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'u':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint16_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'm':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint32_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            case 'M':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint64_t len{};\n                return get_number(input_format, len) && get_string(input_format, len, result);\n            }\n\n            default:\n                break;\n        }\n        auto last_token = get_token_string();\n        std::string message;\n\n        if (input_format != input_format_t::bjdata)\n        {\n            message = \"expected length type specification (U, i, I, l, L); last byte: 0x\" + last_token;\n        }\n        else\n        {\n            message = \"expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x\" + last_token;\n        }\n        return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, \"string\"), nullptr));\n    }\n\n    /*!\n    @param[out] dim  an integer vector storing the ND array dimensions\n    @return whether reading ND array size vector is successful\n    */\n    bool get_ubjson_ndarray_size(std::vector<size_t>& dim)\n    {\n        std::pair<std::size_t, char_int_type> size_and_type;\n        size_t dimlen = 0;\n        bool no_ndarray = true;\n\n        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))\n        {\n            return false;\n        }\n\n        if (size_and_type.first != npos)\n        {\n            if (size_and_type.second != 0)\n            {\n                if (size_and_type.second != 'N')\n                {\n                    for (std::size_t i = 0; i < size_and_type.first; ++i)\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))\n                        {\n                            return false;\n                        }\n                        dim.push_back(dimlen);\n                    }\n                }\n            }\n            else\n            {\n                for (std::size_t i = 0; i < size_and_type.first; ++i)\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))\n                    {\n                        return false;\n                    }\n                    dim.push_back(dimlen);\n                }\n            }\n        }\n        else\n        {\n            while (current != ']')\n            {\n                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))\n                {\n                    return false;\n                }\n                dim.push_back(dimlen);\n                get_ignore_noop();\n            }\n        }\n        return true;\n    }\n\n    /*!\n    @param[out] result  determined size\n    @param[in,out] is_ndarray  for input, `true` means already inside an ndarray vector\n                               or ndarray dimension is not allowed; `false` means ndarray\n                               is allowed; for output, `true` means an ndarray is found;\n                               is_ndarray can only return `true` when its initial value\n                               is `false`\n    @param[in] prefix  type marker if already read, otherwise set to 0\n\n    @return whether size determination completed\n    */\n    bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0)\n    {\n        if (prefix == 0)\n        {\n            prefix = get_ignore_noop();\n        }\n\n        switch (prefix)\n        {\n            case 'U':\n            {\n                std::uint8_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                result = static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'i':\n            {\n                std::int8_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                if (number < 0)\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,\n                                            exception_message(input_format, \"count in an optimized container must be positive\", \"size\"), nullptr));\n                }\n                result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char\n                return true;\n            }\n\n            case 'I':\n            {\n                std::int16_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                if (number < 0)\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,\n                                            exception_message(input_format, \"count in an optimized container must be positive\", \"size\"), nullptr));\n                }\n                result = static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'l':\n            {\n                std::int32_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                if (number < 0)\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,\n                                            exception_message(input_format, \"count in an optimized container must be positive\", \"size\"), nullptr));\n                }\n                result = static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'L':\n            {\n                std::int64_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                if (number < 0)\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read,\n                                            exception_message(input_format, \"count in an optimized container must be positive\", \"size\"), nullptr));\n                }\n                if (!value_in_range_of<std::size_t>(number))\n                {\n                    return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408,\n                                            exception_message(input_format, \"integer value overflow\", \"size\"), nullptr));\n                }\n                result = static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'u':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint16_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                result = static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'm':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint32_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                result = conditional_static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case 'M':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint64_t number{};\n                if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))\n                {\n                    return false;\n                }\n                if (!value_in_range_of<std::size_t>(number))\n                {\n                    return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408,\n                                            exception_message(input_format, \"integer value overflow\", \"size\"), nullptr));\n                }\n                result = detail::conditional_static_cast<std::size_t>(number);\n                return true;\n            }\n\n            case '[':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, \"ndarray dimensional vector is not allowed\", \"size\"), nullptr));\n                }\n                std::vector<size_t> dim;\n                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))\n                {\n                    return false;\n                }\n                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector\n                {\n                    result = dim.at(dim.size() - 1);\n                    return true;\n                }\n                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format\n                {\n                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container\n                    {\n                        if ( i == 0 )\n                        {\n                            result = 0;\n                            return true;\n                        }\n                    }\n\n                    string_t key = \"_ArraySize_\";\n                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))\n                    {\n                        return false;\n                    }\n                    result = 1;\n                    for (auto i : dim)\n                    {\n                        result *= i;\n                        if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()\n                        {\n                            return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, \"excessive ndarray size caused overflow\", \"size\"), nullptr));\n                        }\n                        if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(i))))\n                        {\n                            return false;\n                        }\n                    }\n                    is_ndarray = true;\n                    return sax->end_array();\n                }\n                result = 0;\n                return true;\n            }\n\n            default:\n                break;\n        }\n        auto last_token = get_token_string();\n        std::string message;\n\n        if (input_format != input_format_t::bjdata)\n        {\n            message = \"expected length type specification (U, i, I, l, L) after '#'; last byte: 0x\" + last_token;\n        }\n        else\n        {\n            message = \"expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x\" + last_token;\n        }\n        return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, \"size\"), nullptr));\n    }\n\n    /*!\n    @brief determine the type and size for a container\n\n    In the optimized UBJSON format, a type and a size can be provided to allow\n    for a more compact representation.\n\n    @param[out] result  pair of the size and the type\n    @param[in] inside_ndarray  whether the parser is parsing an ND array dimensional vector\n\n    @return whether pair creation completed\n    */\n    bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& result, bool inside_ndarray = false)\n    {\n        result.first = npos; // size\n        result.second = 0; // type\n        bool is_ndarray = false;\n\n        get_ignore_noop();\n\n        if (current == '$')\n        {\n            result.second = get();  // must not ignore 'N', because 'N' maybe the type\n            if (input_format == input_format_t::bjdata\n                    && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                        exception_message(input_format, concat(\"marker 0x\", last_token, \" is not a permitted optimized array type\"), \"type\"), nullptr));\n            }\n\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"type\")))\n            {\n                return false;\n            }\n\n            get_ignore_noop();\n            if (JSON_HEDLEY_UNLIKELY(current != '#'))\n            {\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"value\")))\n                {\n                    return false;\n                }\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                        exception_message(input_format, concat(\"expected '#' after type information; last byte: 0x\", last_token), \"size\"), nullptr));\n            }\n\n            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);\n            if (input_format == input_format_t::bjdata && is_ndarray)\n            {\n                if (inside_ndarray)\n                {\n                    return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read,\n                                            exception_message(input_format, \"ndarray can not be recursive\", \"size\"), nullptr));\n                }\n                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters\n            }\n            return is_error;\n        }\n\n        if (current == '#')\n        {\n            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);\n            if (input_format == input_format_t::bjdata && is_ndarray)\n            {\n                return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read,\n                                        exception_message(input_format, \"ndarray requires both type and size\", \"size\"), nullptr));\n            }\n            return is_error;\n        }\n\n        return true;\n    }\n\n    /*!\n    @param prefix  the previously read or set type prefix\n    @return whether value creation completed\n    */\n    bool get_ubjson_value(const char_int_type prefix)\n    {\n        switch (prefix)\n        {\n            case char_traits<char_type>::eof():  // EOF\n                return unexpect_eof(input_format, \"value\");\n\n            case 'T':  // true\n                return sax->boolean(true);\n            case 'F':  // false\n                return sax->boolean(false);\n\n            case 'Z':  // null\n                return sax->null();\n\n            case 'U':\n            {\n                std::uint8_t number{};\n                return get_number(input_format, number) && sax->number_unsigned(number);\n            }\n\n            case 'i':\n            {\n                std::int8_t number{};\n                return get_number(input_format, number) && sax->number_integer(number);\n            }\n\n            case 'I':\n            {\n                std::int16_t number{};\n                return get_number(input_format, number) && sax->number_integer(number);\n            }\n\n            case 'l':\n            {\n                std::int32_t number{};\n                return get_number(input_format, number) && sax->number_integer(number);\n            }\n\n            case 'L':\n            {\n                std::int64_t number{};\n                return get_number(input_format, number) && sax->number_integer(number);\n            }\n\n            case 'u':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint16_t number{};\n                return get_number(input_format, number) && sax->number_unsigned(number);\n            }\n\n            case 'm':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint32_t number{};\n                return get_number(input_format, number) && sax->number_unsigned(number);\n            }\n\n            case 'M':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                std::uint64_t number{};\n                return get_number(input_format, number) && sax->number_unsigned(number);\n            }\n\n            case 'h':\n            {\n                if (input_format != input_format_t::bjdata)\n                {\n                    break;\n                }\n                const auto byte1_raw = get();\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"number\")))\n                {\n                    return false;\n                }\n                const auto byte2_raw = get();\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"number\")))\n                {\n                    return false;\n                }\n\n                const auto byte1 = static_cast<unsigned char>(byte1_raw);\n                const auto byte2 = static_cast<unsigned char>(byte2_raw);\n\n                // code from RFC 7049, Appendix D, Figure 3:\n                // As half-precision floating-point numbers were only added\n                // to IEEE 754 in 2008, today's programming platforms often\n                // still only have limited support for them. It is very\n                // easy to include at least decoding support for them even\n                // without such support. An example of a small decoder for\n                // half-precision floating-point numbers in the C language\n                // is shown in Fig. 3.\n                const auto half = static_cast<unsigned int>((byte2 << 8u) + byte1);\n                const double val = [&half]\n                {\n                    const int exp = (half >> 10u) & 0x1Fu;\n                    const unsigned int mant = half & 0x3FFu;\n                    JSON_ASSERT(0 <= exp&& exp <= 32);\n                    JSON_ASSERT(mant <= 1024);\n                    switch (exp)\n                    {\n                        case 0:\n                            return std::ldexp(mant, -24);\n                        case 31:\n                            return (mant == 0)\n                            ? std::numeric_limits<double>::infinity()\n                            : std::numeric_limits<double>::quiet_NaN();\n                        default:\n                            return std::ldexp(mant + 1024, exp - 25);\n                    }\n                }();\n                return sax->number_float((half & 0x8000u) != 0\n                                         ? static_cast<number_float_t>(-val)\n                                         : static_cast<number_float_t>(val), \"\");\n            }\n\n            case 'd':\n            {\n                float number{};\n                return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 'D':\n            {\n                double number{};\n                return get_number(input_format, number) && sax->number_float(static_cast<number_float_t>(number), \"\");\n            }\n\n            case 'H':\n            {\n                return get_ubjson_high_precision_number();\n            }\n\n            case 'C':  // char\n            {\n                get();\n                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"char\")))\n                {\n                    return false;\n                }\n                if (JSON_HEDLEY_UNLIKELY(current > 127))\n                {\n                    auto last_token = get_token_string();\n                    return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read,\n                                            exception_message(input_format, concat(\"byte after 'C' must be in range 0x00..0x7F; last byte: 0x\", last_token), \"char\"), nullptr));\n                }\n                string_t s(1, static_cast<typename string_t::value_type>(current));\n                return sax->string(s);\n            }\n\n            case 'S':  // string\n            {\n                string_t s;\n                return get_ubjson_string(s) && sax->string(s);\n            }\n\n            case '[':  // array\n                return get_ubjson_array();\n\n            case '{':  // object\n                return get_ubjson_object();\n\n            default: // anything else\n                break;\n        }\n        auto last_token = get_token_string();\n        return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, \"invalid byte: 0x\" + last_token, \"value\"), nullptr));\n    }\n\n    /*!\n    @return whether array creation completed\n    */\n    bool get_ubjson_array()\n    {\n        std::pair<std::size_t, char_int_type> size_and_type;\n        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))\n        {\n            return false;\n        }\n\n        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):\n        // {\"_ArrayType_\" : \"typeid\", \"_ArraySize_\" : [n1, n2, ...], \"_ArrayData_\" : [v1, v2, ...]}\n\n        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)\n        {\n            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker\n            auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t)\n            {\n                return p.first < t;\n            });\n            string_t key = \"_ArrayType_\";\n            if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second))\n            {\n                auto last_token = get_token_string();\n                return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                        exception_message(input_format, \"invalid byte: 0x\" + last_token, \"type\"), nullptr));\n            }\n\n            string_t type = it->second; // sax->string() takes a reference\n            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type)))\n            {\n                return false;\n            }\n\n            if (size_and_type.second == 'C')\n            {\n                size_and_type.second = 'U';\n            }\n\n            key = \"_ArrayData_\";\n            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))\n            {\n                return false;\n            }\n\n            for (std::size_t i = 0; i < size_and_type.first; ++i)\n            {\n                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))\n                {\n                    return false;\n                }\n            }\n\n            return (sax->end_array() && sax->end_object());\n        }\n\n        if (size_and_type.first != npos)\n        {\n            if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first)))\n            {\n                return false;\n            }\n\n            if (size_and_type.second != 0)\n            {\n                if (size_and_type.second != 'N')\n                {\n                    for (std::size_t i = 0; i < size_and_type.first; ++i)\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))\n                        {\n                            return false;\n                        }\n                    }\n                }\n            }\n            else\n            {\n                for (std::size_t i = 0; i < size_and_type.first; ++i)\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))\n                    {\n                        return false;\n                    }\n                }\n            }\n        }\n        else\n        {\n            if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))\n            {\n                return false;\n            }\n\n            while (current != ']')\n            {\n                if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false)))\n                {\n                    return false;\n                }\n                get_ignore_noop();\n            }\n        }\n\n        return sax->end_array();\n    }\n\n    /*!\n    @return whether object creation completed\n    */\n    bool get_ubjson_object()\n    {\n        std::pair<std::size_t, char_int_type> size_and_type;\n        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))\n        {\n            return false;\n        }\n\n        // do not accept ND-array size in objects in BJData\n        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)\n        {\n            auto last_token = get_token_string();\n            return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read,\n                                    exception_message(input_format, \"BJData object does not support ND-array size in optimized format\", \"object\"), nullptr));\n        }\n\n        string_t key;\n        if (size_and_type.first != npos)\n        {\n            if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first)))\n            {\n                return false;\n            }\n\n            if (size_and_type.second != 0)\n            {\n                for (std::size_t i = 0; i < size_and_type.first; ++i)\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key)))\n                    {\n                        return false;\n                    }\n                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))\n                    {\n                        return false;\n                    }\n                    key.clear();\n                }\n            }\n            else\n            {\n                for (std::size_t i = 0; i < size_and_type.first; ++i)\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key)))\n                    {\n                        return false;\n                    }\n                    if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))\n                    {\n                        return false;\n                    }\n                    key.clear();\n                }\n            }\n        }\n        else\n        {\n            if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))\n            {\n                return false;\n            }\n\n            while (current != '}')\n            {\n                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key)))\n                {\n                    return false;\n                }\n                if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal()))\n                {\n                    return false;\n                }\n                get_ignore_noop();\n                key.clear();\n            }\n        }\n\n        return sax->end_object();\n    }\n\n    // Note, no reader for UBJSON binary types is implemented because they do\n    // not exist\n\n    bool get_ubjson_high_precision_number()\n    {\n        // get size of following number string\n        std::size_t size{};\n        bool no_ndarray = true;\n        auto res = get_ubjson_size_value(size, no_ndarray);\n        if (JSON_HEDLEY_UNLIKELY(!res))\n        {\n            return res;\n        }\n\n        // get number string\n        std::vector<char> number_vector;\n        for (std::size_t i = 0; i < size; ++i)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, \"number\")))\n            {\n                return false;\n            }\n            number_vector.push_back(static_cast<char>(current));\n        }\n\n        // parse number string\n        using ia_type = decltype(detail::input_adapter(number_vector));\n        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);\n        const auto result_number = number_lexer.scan();\n        const auto number_string = number_lexer.get_token_string();\n        const auto result_remainder = number_lexer.scan();\n\n        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;\n\n        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))\n        {\n            return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read,\n                                    exception_message(input_format, concat(\"invalid number text: \", number_lexer.get_token_string()), \"high-precision number\"), nullptr));\n        }\n\n        switch (result_number)\n        {\n            case token_type::value_integer:\n                return sax->number_integer(number_lexer.get_number_integer());\n            case token_type::value_unsigned:\n                return sax->number_unsigned(number_lexer.get_number_unsigned());\n            case token_type::value_float:\n                return sax->number_float(number_lexer.get_number_float(), std::move(number_string));\n            case token_type::uninitialized:\n            case token_type::literal_true:\n            case token_type::literal_false:\n            case token_type::literal_null:\n            case token_type::value_string:\n            case token_type::begin_array:\n            case token_type::begin_object:\n            case token_type::end_array:\n            case token_type::end_object:\n            case token_type::name_separator:\n            case token_type::value_separator:\n            case token_type::parse_error:\n            case token_type::end_of_input:\n            case token_type::literal_or_value:\n            default:\n                return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read,\n                                        exception_message(input_format, concat(\"invalid number text: \", number_lexer.get_token_string()), \"high-precision number\"), nullptr));\n        }\n    }\n\n    ///////////////////////\n    // Utility functions //\n    ///////////////////////\n\n    /*!\n    @brief get next character from the input\n\n    This function provides the interface to the used input adapter. It does\n    not throw in case the input reached EOF, but returns a -'ve valued\n    `char_traits<char_type>::eof()` in that case.\n\n    @return character read from the input\n    */\n    char_int_type get()\n    {\n        ++chars_read;\n        return current = ia.get_character();\n    }\n\n    /*!\n    @return character read from the input after ignoring all 'N' entries\n    */\n    char_int_type get_ignore_noop()\n    {\n        do\n        {\n            get();\n        }\n        while (current == 'N');\n\n        return current;\n    }\n\n    /*\n    @brief read a number from the input\n\n    @tparam NumberType the type of the number\n    @param[in] format   the current format (for diagnostics)\n    @param[out] result  number of type @a NumberType\n\n    @return whether conversion completed\n\n    @note This function needs to respect the system's endianness, because\n          bytes in CBOR, MessagePack, and UBJSON are stored in network order\n          (big endian) and therefore need reordering on little endian systems.\n          On the other hand, BSON and BJData use little endian and should reorder\n          on big endian systems.\n    */\n    template<typename NumberType, bool InputIsLittleEndian = false>\n    bool get_number(const input_format_t format, NumberType& result)\n    {\n        // step 1: read input into array with system's byte order\n        std::array<std::uint8_t, sizeof(NumberType)> vec{};\n        for (std::size_t i = 0; i < sizeof(NumberType); ++i)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, \"number\")))\n            {\n                return false;\n            }\n\n            // reverse byte order prior to conversion if necessary\n            if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata))\n            {\n                vec[sizeof(NumberType) - i - 1] = static_cast<std::uint8_t>(current);\n            }\n            else\n            {\n                vec[i] = static_cast<std::uint8_t>(current); // LCOV_EXCL_LINE\n            }\n        }\n\n        // step 2: convert array into number of type T and return\n        std::memcpy(&result, vec.data(), sizeof(NumberType));\n        return true;\n    }\n\n    /*!\n    @brief create a string by reading characters from the input\n\n    @tparam NumberType the type of the number\n    @param[in] format the current format (for diagnostics)\n    @param[in] len number of characters to read\n    @param[out] result string created by reading @a len bytes\n\n    @return whether string creation completed\n\n    @note We can not reserve @a len bytes for the result, because @a len\n          may be too large. Usually, @ref unexpect_eof() detects the end of\n          the input before we run out of string memory.\n    */\n    template<typename NumberType>\n    bool get_string(const input_format_t format,\n                    const NumberType len,\n                    string_t& result)\n    {\n        bool success = true;\n        for (NumberType i = 0; i < len; i++)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, \"string\")))\n            {\n                success = false;\n                break;\n            }\n            result.push_back(static_cast<typename string_t::value_type>(current));\n        }\n        return success;\n    }\n\n    /*!\n    @brief create a byte array by reading bytes from the input\n\n    @tparam NumberType the type of the number\n    @param[in] format the current format (for diagnostics)\n    @param[in] len number of bytes to read\n    @param[out] result byte array created by reading @a len bytes\n\n    @return whether byte array creation completed\n\n    @note We can not reserve @a len bytes for the result, because @a len\n          may be too large. Usually, @ref unexpect_eof() detects the end of\n          the input before we run out of memory.\n    */\n    template<typename NumberType>\n    bool get_binary(const input_format_t format,\n                    const NumberType len,\n                    binary_t& result)\n    {\n        bool success = true;\n        for (NumberType i = 0; i < len; i++)\n        {\n            get();\n            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, \"binary\")))\n            {\n                success = false;\n                break;\n            }\n            result.push_back(static_cast<std::uint8_t>(current));\n        }\n        return success;\n    }\n\n    /*!\n    @param[in] format   the current format (for diagnostics)\n    @param[in] context  further context information (for diagnostics)\n    @return whether the last read character is not EOF\n    */\n    JSON_HEDLEY_NON_NULL(3)\n    bool unexpect_eof(const input_format_t format, const char* context) const\n    {\n        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))\n        {\n            return sax->parse_error(chars_read, \"<end of file>\",\n                                    parse_error::create(110, chars_read, exception_message(format, \"unexpected end of input\", context), nullptr));\n        }\n        return true;\n    }\n\n    /*!\n    @return a string representation of the last read byte\n    */\n    std::string get_token_string() const\n    {\n        std::array<char, 3> cr{{}};\n        static_cast<void>((std::snprintf)(cr.data(), cr.size(), \"%.2hhX\", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n        return std::string{cr.data()};\n    }\n\n    /*!\n    @param[in] format   the current format\n    @param[in] detail   a detailed error message\n    @param[in] context  further context information\n    @return a message string to use in the parse_error exceptions\n    */\n    std::string exception_message(const input_format_t format,\n                                  const std::string& detail,\n                                  const std::string& context) const\n    {\n        std::string error_msg = \"syntax error while parsing \";\n\n        switch (format)\n        {\n            case input_format_t::cbor:\n                error_msg += \"CBOR\";\n                break;\n\n            case input_format_t::msgpack:\n                error_msg += \"MessagePack\";\n                break;\n\n            case input_format_t::ubjson:\n                error_msg += \"UBJSON\";\n                break;\n\n            case input_format_t::bson:\n                error_msg += \"BSON\";\n                break;\n\n            case input_format_t::bjdata:\n                error_msg += \"BJData\";\n                break;\n\n            case input_format_t::json: // LCOV_EXCL_LINE\n            default:            // LCOV_EXCL_LINE\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        }\n\n        return concat(error_msg, ' ', context, \": \", detail);\n    }\n\n  private:\n    static JSON_INLINE_VARIABLE constexpr std::size_t npos = static_cast<std::size_t>(-1);\n\n    /// input adapter\n    InputAdapterType ia;\n\n    /// the current character\n    char_int_type current = char_traits<char_type>::eof();\n\n    /// the number of characters read\n    std::size_t chars_read = 0;\n\n    /// whether we can assume little endianness\n    const bool is_little_endian = little_endianness();\n\n    /// input format\n    const input_format_t input_format = input_format_t::json;\n\n    /// the SAX parser\n    json_sax_t* sax = nullptr;\n\n    // excluded markers in bjdata optimized type\n#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \\\n    make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')\n\n#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \\\n    make_array<bjd_type>(                      \\\n    bjd_type{'C', \"char\"},                     \\\n    bjd_type{'D', \"double\"},                   \\\n    bjd_type{'I', \"int16\"},                    \\\n    bjd_type{'L', \"int64\"},                    \\\n    bjd_type{'M', \"uint64\"},                   \\\n    bjd_type{'U', \"uint8\"},                    \\\n    bjd_type{'d', \"single\"},                   \\\n    bjd_type{'i', \"int8\"},                     \\\n    bjd_type{'l', \"int32\"},                    \\\n    bjd_type{'m', \"uint32\"},                   \\\n    bjd_type{'u', \"uint16\"})\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    // lookup tables\n    // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)\n    const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers =\n        JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;\n\n    using bjd_type = std::pair<char_int_type, string_t>;\n    // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)\n    const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map =\n        JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;\n\n#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_\n#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_\n};\n\n#ifndef JSON_HAS_CPP_17\n    template<typename BasicJsonType, typename InputAdapterType, typename SAX>\n    constexpr std::size_t binary_reader<BasicJsonType, InputAdapterType, SAX>::npos;\n#endif\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/input/input_adapters.hpp>\n\n// #include <nlohmann/detail/input/lexer.hpp>\n\n// #include <nlohmann/detail/input/parser.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cmath> // isfinite\n#include <cstdint> // uint8_t\n#include <functional> // function\n#include <string> // string\n#include <utility> // move\n#include <vector> // vector\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/input/input_adapters.hpp>\n\n// #include <nlohmann/detail/input/json_sax.hpp>\n\n// #include <nlohmann/detail/input/lexer.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/is_sax.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n////////////\n// parser //\n////////////\n\nenum class parse_event_t : std::uint8_t\n{\n    /// the parser read `{` and started to process a JSON object\n    object_start,\n    /// the parser read `}` and finished processing a JSON object\n    object_end,\n    /// the parser read `[` and started to process a JSON array\n    array_start,\n    /// the parser read `]` and finished processing a JSON array\n    array_end,\n    /// the parser read a key of a value in an object\n    key,\n    /// the parser finished reading a JSON value\n    value\n};\n\ntemplate<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;\n\n/*!\n@brief syntax analysis\n\nThis class implements a recursive descent parser.\n*/\ntemplate<typename BasicJsonType, typename InputAdapterType>\nclass parser\n{\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using string_t = typename BasicJsonType::string_t;\n    using lexer_t = lexer<BasicJsonType, InputAdapterType>;\n    using token_type = typename lexer_t::token_type;\n\n  public:\n    /// a parser reading from an input adapter\n    explicit parser(InputAdapterType&& adapter,\n                    const parser_callback_t<BasicJsonType> cb = nullptr,\n                    const bool allow_exceptions_ = true,\n                    const bool skip_comments = false)\n        : callback(cb)\n        , m_lexer(std::move(adapter), skip_comments)\n        , allow_exceptions(allow_exceptions_)\n    {\n        // read first token\n        get_token();\n    }\n\n    /*!\n    @brief public parser interface\n\n    @param[in] strict      whether to expect the last token to be EOF\n    @param[in,out] result  parsed JSON value\n\n    @throw parse_error.101 in case of an unexpected token\n    @throw parse_error.102 if to_unicode fails or surrogate error\n    @throw parse_error.103 if to_unicode fails\n    */\n    void parse(const bool strict, BasicJsonType& result)\n    {\n        if (callback)\n        {\n            json_sax_dom_callback_parser<BasicJsonType> sdp(result, callback, allow_exceptions);\n            sax_parse_internal(&sdp);\n\n            // in strict mode, input must be completely read\n            if (strict && (get_token() != token_type::end_of_input))\n            {\n                sdp.parse_error(m_lexer.get_position(),\n                                m_lexer.get_token_string(),\n                                parse_error::create(101, m_lexer.get_position(),\n                                                    exception_message(token_type::end_of_input, \"value\"), nullptr));\n            }\n\n            // in case of an error, return discarded value\n            if (sdp.is_errored())\n            {\n                result = value_t::discarded;\n                return;\n            }\n\n            // set top-level value to null if it was discarded by the callback\n            // function\n            if (result.is_discarded())\n            {\n                result = nullptr;\n            }\n        }\n        else\n        {\n            json_sax_dom_parser<BasicJsonType> sdp(result, allow_exceptions);\n            sax_parse_internal(&sdp);\n\n            // in strict mode, input must be completely read\n            if (strict && (get_token() != token_type::end_of_input))\n            {\n                sdp.parse_error(m_lexer.get_position(),\n                                m_lexer.get_token_string(),\n                                parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, \"value\"), nullptr));\n            }\n\n            // in case of an error, return discarded value\n            if (sdp.is_errored())\n            {\n                result = value_t::discarded;\n                return;\n            }\n        }\n\n        result.assert_invariant();\n    }\n\n    /*!\n    @brief public accept interface\n\n    @param[in] strict  whether to expect the last token to be EOF\n    @return whether the input is a proper JSON text\n    */\n    bool accept(const bool strict = true)\n    {\n        json_sax_acceptor<BasicJsonType> sax_acceptor;\n        return sax_parse(&sax_acceptor, strict);\n    }\n\n    template<typename SAX>\n    JSON_HEDLEY_NON_NULL(2)\n    bool sax_parse(SAX* sax, const bool strict = true)\n    {\n        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};\n        const bool result = sax_parse_internal(sax);\n\n        // strict mode: next byte must be EOF\n        if (result && strict && (get_token() != token_type::end_of_input))\n        {\n            return sax->parse_error(m_lexer.get_position(),\n                                    m_lexer.get_token_string(),\n                                    parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, \"value\"), nullptr));\n        }\n\n        return result;\n    }\n\n  private:\n    template<typename SAX>\n    JSON_HEDLEY_NON_NULL(2)\n    bool sax_parse_internal(SAX* sax)\n    {\n        // stack to remember the hierarchy of structured values we are parsing\n        // true = array; false = object\n        std::vector<bool> states;\n        // value to avoid a goto (see comment where set to true)\n        bool skip_to_state_evaluation = false;\n\n        while (true)\n        {\n            if (!skip_to_state_evaluation)\n            {\n                // invariant: get_token() was called before each iteration\n                switch (last_token)\n                {\n                    case token_type::begin_object:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast<std::size_t>(-1))))\n                        {\n                            return false;\n                        }\n\n                        // closing } -> we are done\n                        if (get_token() == token_type::end_object)\n                        {\n                            if (JSON_HEDLEY_UNLIKELY(!sax->end_object()))\n                            {\n                                return false;\n                            }\n                            break;\n                        }\n\n                        // parse key\n                        if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string))\n                        {\n                            return sax->parse_error(m_lexer.get_position(),\n                                                    m_lexer.get_token_string(),\n                                                    parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, \"object key\"), nullptr));\n                        }\n                        if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))\n                        {\n                            return false;\n                        }\n\n                        // parse separator (:)\n                        if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))\n                        {\n                            return sax->parse_error(m_lexer.get_position(),\n                                                    m_lexer.get_token_string(),\n                                                    parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, \"object separator\"), nullptr));\n                        }\n\n                        // remember we are now inside an object\n                        states.push_back(false);\n\n                        // parse values\n                        get_token();\n                        continue;\n                    }\n\n                    case token_type::begin_array:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast<std::size_t>(-1))))\n                        {\n                            return false;\n                        }\n\n                        // closing ] -> we are done\n                        if (get_token() == token_type::end_array)\n                        {\n                            if (JSON_HEDLEY_UNLIKELY(!sax->end_array()))\n                            {\n                                return false;\n                            }\n                            break;\n                        }\n\n                        // remember we are now inside an array\n                        states.push_back(true);\n\n                        // parse values (no need to call get_token)\n                        continue;\n                    }\n\n                    case token_type::value_float:\n                    {\n                        const auto res = m_lexer.get_number_float();\n\n                        if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res)))\n                        {\n                            return sax->parse_error(m_lexer.get_position(),\n                                                    m_lexer.get_token_string(),\n                                                    out_of_range::create(406, concat(\"number overflow parsing '\", m_lexer.get_token_string(), '\\''), nullptr));\n                        }\n\n                        if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string())))\n                        {\n                            return false;\n                        }\n\n                        break;\n                    }\n\n                    case token_type::literal_false:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false)))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::literal_null:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->null()))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::literal_true:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true)))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::value_integer:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer())))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::value_string:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string())))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::value_unsigned:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned())))\n                        {\n                            return false;\n                        }\n                        break;\n                    }\n\n                    case token_type::parse_error:\n                    {\n                        // using \"uninitialized\" to avoid \"expected\" message\n                        return sax->parse_error(m_lexer.get_position(),\n                                                m_lexer.get_token_string(),\n                                                parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, \"value\"), nullptr));\n                    }\n                    case token_type::end_of_input:\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1))\n                        {\n                            return sax->parse_error(m_lexer.get_position(),\n                                                    m_lexer.get_token_string(),\n                                                    parse_error::create(101, m_lexer.get_position(),\n                                                            \"attempting to parse an empty input; check that your input string or stream contains the expected JSON\", nullptr));\n                        }\n\n                        return sax->parse_error(m_lexer.get_position(),\n                                                m_lexer.get_token_string(),\n                                                parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, \"value\"), nullptr));\n                    }\n                    case token_type::uninitialized:\n                    case token_type::end_array:\n                    case token_type::end_object:\n                    case token_type::name_separator:\n                    case token_type::value_separator:\n                    case token_type::literal_or_value:\n                    default: // the last token was unexpected\n                    {\n                        return sax->parse_error(m_lexer.get_position(),\n                                                m_lexer.get_token_string(),\n                                                parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, \"value\"), nullptr));\n                    }\n                }\n            }\n            else\n            {\n                skip_to_state_evaluation = false;\n            }\n\n            // we reached this line after we successfully parsed a value\n            if (states.empty())\n            {\n                // empty stack: we reached the end of the hierarchy: done\n                return true;\n            }\n\n            if (states.back())  // array\n            {\n                // comma -> next value\n                if (get_token() == token_type::value_separator)\n                {\n                    // parse a new value\n                    get_token();\n                    continue;\n                }\n\n                // closing ]\n                if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array))\n                {\n                    if (JSON_HEDLEY_UNLIKELY(!sax->end_array()))\n                    {\n                        return false;\n                    }\n\n                    // We are done with this array. Before we can parse a\n                    // new value, we need to evaluate the new state first.\n                    // By setting skip_to_state_evaluation to false, we\n                    // are effectively jumping to the beginning of this if.\n                    JSON_ASSERT(!states.empty());\n                    states.pop_back();\n                    skip_to_state_evaluation = true;\n                    continue;\n                }\n\n                return sax->parse_error(m_lexer.get_position(),\n                                        m_lexer.get_token_string(),\n                                        parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, \"array\"), nullptr));\n            }\n\n            // states.back() is false -> object\n\n            // comma -> next value\n            if (get_token() == token_type::value_separator)\n            {\n                // parse key\n                if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string))\n                {\n                    return sax->parse_error(m_lexer.get_position(),\n                                            m_lexer.get_token_string(),\n                                            parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, \"object key\"), nullptr));\n                }\n\n                if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))\n                {\n                    return false;\n                }\n\n                // parse separator (:)\n                if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))\n                {\n                    return sax->parse_error(m_lexer.get_position(),\n                                            m_lexer.get_token_string(),\n                                            parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, \"object separator\"), nullptr));\n                }\n\n                // parse values\n                get_token();\n                continue;\n            }\n\n            // closing }\n            if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object))\n            {\n                if (JSON_HEDLEY_UNLIKELY(!sax->end_object()))\n                {\n                    return false;\n                }\n\n                // We are done with this object. Before we can parse a\n                // new value, we need to evaluate the new state first.\n                // By setting skip_to_state_evaluation to false, we\n                // are effectively jumping to the beginning of this if.\n                JSON_ASSERT(!states.empty());\n                states.pop_back();\n                skip_to_state_evaluation = true;\n                continue;\n            }\n\n            return sax->parse_error(m_lexer.get_position(),\n                                    m_lexer.get_token_string(),\n                                    parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, \"object\"), nullptr));\n        }\n    }\n\n    /// get next token from lexer\n    token_type get_token()\n    {\n        return last_token = m_lexer.scan();\n    }\n\n    std::string exception_message(const token_type expected, const std::string& context)\n    {\n        std::string error_msg = \"syntax error \";\n\n        if (!context.empty())\n        {\n            error_msg += concat(\"while parsing \", context, ' ');\n        }\n\n        error_msg += \"- \";\n\n        if (last_token == token_type::parse_error)\n        {\n            error_msg += concat(m_lexer.get_error_message(), \"; last read: '\",\n                                m_lexer.get_token_string(), '\\'');\n        }\n        else\n        {\n            error_msg += concat(\"unexpected \", lexer_t::token_type_name(last_token));\n        }\n\n        if (expected != token_type::uninitialized)\n        {\n            error_msg += concat(\"; expected \", lexer_t::token_type_name(expected));\n        }\n\n        return error_msg;\n    }\n\n  private:\n    /// callback function\n    const parser_callback_t<BasicJsonType> callback = nullptr;\n    /// the type of the last read token\n    token_type last_token = token_type::uninitialized;\n    /// the lexer\n    lexer_t m_lexer;\n    /// whether to throw exceptions in case of errors\n    const bool allow_exceptions = true;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/iterators/internal_iterator.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/iterators/primitive_iterator.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef> // ptrdiff_t\n#include <limits>  // numeric_limits\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/*\n@brief an iterator for primitive JSON types\n\nThis class models an iterator for primitive JSON types (boolean, number,\nstring). It's only purpose is to allow the iterator/const_iterator classes\nto \"iterate\" over primitive values. Internally, the iterator is modeled by\na `difference_type` variable. Value begin_value (`0`) models the begin,\nend_value (`1`) models past the end.\n*/\nclass primitive_iterator_t\n{\n  private:\n    using difference_type = std::ptrdiff_t;\n    static constexpr difference_type begin_value = 0;\n    static constexpr difference_type end_value = begin_value + 1;\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    /// iterator as signed integer type\n    difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)();\n\n  public:\n    constexpr difference_type get_value() const noexcept\n    {\n        return m_it;\n    }\n\n    /// set iterator to a defined beginning\n    void set_begin() noexcept\n    {\n        m_it = begin_value;\n    }\n\n    /// set iterator to a defined past the end\n    void set_end() noexcept\n    {\n        m_it = end_value;\n    }\n\n    /// return whether the iterator can be dereferenced\n    constexpr bool is_begin() const noexcept\n    {\n        return m_it == begin_value;\n    }\n\n    /// return whether the iterator is at end\n    constexpr bool is_end() const noexcept\n    {\n        return m_it == end_value;\n    }\n\n    friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept\n    {\n        return lhs.m_it == rhs.m_it;\n    }\n\n    friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept\n    {\n        return lhs.m_it < rhs.m_it;\n    }\n\n    primitive_iterator_t operator+(difference_type n) noexcept\n    {\n        auto result = *this;\n        result += n;\n        return result;\n    }\n\n    friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept\n    {\n        return lhs.m_it - rhs.m_it;\n    }\n\n    primitive_iterator_t& operator++() noexcept\n    {\n        ++m_it;\n        return *this;\n    }\n\n    primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp)\n    {\n        auto result = *this;\n        ++m_it;\n        return result;\n    }\n\n    primitive_iterator_t& operator--() noexcept\n    {\n        --m_it;\n        return *this;\n    }\n\n    primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp)\n    {\n        auto result = *this;\n        --m_it;\n        return result;\n    }\n\n    primitive_iterator_t& operator+=(difference_type n) noexcept\n    {\n        m_it += n;\n        return *this;\n    }\n\n    primitive_iterator_t& operator-=(difference_type n) noexcept\n    {\n        m_it -= n;\n        return *this;\n    }\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/*!\n@brief an iterator value\n\n@note This structure could easily be a union, but MSVC currently does not allow\nunions members with complex constructors, see https://github.com/nlohmann/json/pull/105.\n*/\ntemplate<typename BasicJsonType> struct internal_iterator\n{\n    /// iterator for JSON objects\n    typename BasicJsonType::object_t::iterator object_iterator {};\n    /// iterator for JSON arrays\n    typename BasicJsonType::array_t::iterator array_iterator {};\n    /// generic iterator for all other types\n    primitive_iterator_t primitive_iterator {};\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/iterators/iter_impl.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <iterator> // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next\n#include <type_traits> // conditional, is_const, remove_const\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/iterators/internal_iterator.hpp>\n\n// #include <nlohmann/detail/iterators/primitive_iterator.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n// forward declare, to be able to friend it later on\ntemplate<typename IteratorType> class iteration_proxy;\ntemplate<typename IteratorType> class iteration_proxy_value;\n\n/*!\n@brief a template for a bidirectional iterator for the @ref basic_json class\nThis class implements a both iterators (iterator and const_iterator) for the\n@ref basic_json class.\n@note An iterator is called *initialized* when a pointer to a JSON value has\n      been set (e.g., by a constructor or a copy assignment). If the iterator is\n      default-constructed, it is *uninitialized* and most methods are undefined.\n      **The library uses assertions to detect calls on uninitialized iterators.**\n@requirement The class satisfies the following concept requirements:\n-\n[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator):\n  The iterator that can be moved can be moved in both directions (i.e.\n  incremented and decremented).\n@since version 1.0.0, simplified in version 2.0.9, change to bidirectional\n       iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593)\n*/\ntemplate<typename BasicJsonType>\nclass iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)\n{\n    /// the iterator with BasicJsonType of different const-ness\n    using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;\n    /// allow basic_json to access private members\n    friend other_iter_impl;\n    friend BasicJsonType;\n    friend iteration_proxy<iter_impl>;\n    friend iteration_proxy_value<iter_impl>;\n\n    using object_t = typename BasicJsonType::object_t;\n    using array_t = typename BasicJsonType::array_t;\n    // make sure BasicJsonType is basic_json or const basic_json\n    static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value,\n                  \"iter_impl only accepts (const) basic_json\");\n    // superficial check for the LegacyBidirectionalIterator named requirement\n    static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value\n                  &&  std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,\n                  \"basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.\");\n\n  public:\n    /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17.\n    /// The C++ Standard has never required user-defined iterators to derive from std::iterator.\n    /// A user-defined iterator should provide publicly accessible typedefs named\n    /// iterator_category, value_type, difference_type, pointer, and reference.\n    /// Note that value_type is required to be non-const, even for constant iterators.\n    using iterator_category = std::bidirectional_iterator_tag;\n\n    /// the type of the values when the iterator is dereferenced\n    using value_type = typename BasicJsonType::value_type;\n    /// a type to represent differences between iterators\n    using difference_type = typename BasicJsonType::difference_type;\n    /// defines a pointer to the type iterated over (value_type)\n    using pointer = typename std::conditional<std::is_const<BasicJsonType>::value,\n          typename BasicJsonType::const_pointer,\n          typename BasicJsonType::pointer>::type;\n    /// defines a reference to the type iterated over (value_type)\n    using reference =\n        typename std::conditional<std::is_const<BasicJsonType>::value,\n        typename BasicJsonType::const_reference,\n        typename BasicJsonType::reference>::type;\n\n    iter_impl() = default;\n    ~iter_impl() = default;\n    iter_impl(iter_impl&&) noexcept = default;\n    iter_impl& operator=(iter_impl&&) noexcept = default;\n\n    /*!\n    @brief constructor for a given JSON instance\n    @param[in] object  pointer to a JSON object for this iterator\n    @pre object != nullptr\n    @post The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    explicit iter_impl(pointer object) noexcept : m_object(object)\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                m_it.object_iterator = typename object_t::iterator();\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_it.array_iterator = typename array_t::iterator();\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                m_it.primitive_iterator = primitive_iterator_t();\n                break;\n            }\n        }\n    }\n\n    /*!\n    @note The conventional copy constructor and copy assignment are implicitly\n          defined. Combined with the following converting constructor and\n          assignment, they support: (1) copy from iterator to iterator, (2)\n          copy from const iterator to const iterator, and (3) conversion from\n          iterator to const iterator. However conversion from const iterator\n          to iterator is not defined.\n    */\n\n    /*!\n    @brief const copy constructor\n    @param[in] other const iterator to copy from\n    @note This copy constructor had to be defined explicitly to circumvent a bug\n          occurring on msvc v19.0 compiler (VS 2015) debug build. For more\n          information refer to: https://github.com/nlohmann/json/issues/1608\n    */\n    iter_impl(const iter_impl<const BasicJsonType>& other) noexcept\n        : m_object(other.m_object), m_it(other.m_it)\n    {}\n\n    /*!\n    @brief converting assignment\n    @param[in] other const iterator to copy from\n    @return const/non-const iterator\n    @note It is not checked whether @a other is initialized.\n    */\n    iter_impl& operator=(const iter_impl<const BasicJsonType>& other) noexcept\n    {\n        if (&other != this)\n        {\n            m_object = other.m_object;\n            m_it = other.m_it;\n        }\n        return *this;\n    }\n\n    /*!\n    @brief converting constructor\n    @param[in] other  non-const iterator to copy from\n    @note It is not checked whether @a other is initialized.\n    */\n    iter_impl(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept\n        : m_object(other.m_object), m_it(other.m_it)\n    {}\n\n    /*!\n    @brief converting assignment\n    @param[in] other  non-const iterator to copy from\n    @return const/non-const iterator\n    @note It is not checked whether @a other is initialized.\n    */\n    iter_impl& operator=(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept // NOLINT(cert-oop54-cpp)\n    {\n        m_object = other.m_object;\n        m_it = other.m_it;\n        return *this;\n    }\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    /*!\n    @brief set the iterator to the first value\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    void set_begin() noexcept\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                m_it.object_iterator = m_object->m_data.m_value.object->begin();\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_it.array_iterator = m_object->m_data.m_value.array->begin();\n                break;\n            }\n\n            case value_t::null:\n            {\n                // set to end so begin()==end() is true: null is empty\n                m_it.primitive_iterator.set_end();\n                break;\n            }\n\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                m_it.primitive_iterator.set_begin();\n                break;\n            }\n        }\n    }\n\n    /*!\n    @brief set the iterator past the last value\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    void set_end() noexcept\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                m_it.object_iterator = m_object->m_data.m_value.object->end();\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_it.array_iterator = m_object->m_data.m_value.array->end();\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                m_it.primitive_iterator.set_end();\n                break;\n            }\n        }\n    }\n\n  public:\n    /*!\n    @brief return a reference to the value pointed to by the iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    reference operator*() const\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());\n                return m_it.object_iterator->second;\n            }\n\n            case value_t::array:\n            {\n                JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());\n                return *m_it.array_iterator;\n            }\n\n            case value_t::null:\n                JSON_THROW(invalid_iterator::create(214, \"cannot get value\", m_object));\n\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))\n                {\n                    return *m_object;\n                }\n\n                JSON_THROW(invalid_iterator::create(214, \"cannot get value\", m_object));\n            }\n        }\n    }\n\n    /*!\n    @brief dereference the iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    pointer operator->() const\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());\n                return &(m_it.object_iterator->second);\n            }\n\n            case value_t::array:\n            {\n                JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());\n                return &*m_it.array_iterator;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))\n                {\n                    return m_object;\n                }\n\n                JSON_THROW(invalid_iterator::create(214, \"cannot get value\", m_object));\n            }\n        }\n    }\n\n    /*!\n    @brief post-increment (it++)\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)\n    {\n        auto result = *this;\n        ++(*this);\n        return result;\n    }\n\n    /*!\n    @brief pre-increment (++it)\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl& operator++()\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                std::advance(m_it.object_iterator, 1);\n                break;\n            }\n\n            case value_t::array:\n            {\n                std::advance(m_it.array_iterator, 1);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                ++m_it.primitive_iterator;\n                break;\n            }\n        }\n\n        return *this;\n    }\n\n    /*!\n    @brief post-decrement (it--)\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)\n    {\n        auto result = *this;\n        --(*this);\n        return result;\n    }\n\n    /*!\n    @brief pre-decrement (--it)\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl& operator--()\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n            {\n                std::advance(m_it.object_iterator, -1);\n                break;\n            }\n\n            case value_t::array:\n            {\n                std::advance(m_it.array_iterator, -1);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                --m_it.primitive_iterator;\n                break;\n            }\n        }\n\n        return *this;\n    }\n\n    /*!\n    @brief comparison: equal\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >\n    bool operator==(const IterImpl& other) const\n    {\n        // if objects are not the same, the comparison is undefined\n        if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(212, \"cannot compare iterators of different containers\", m_object));\n        }\n\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n                return (m_it.object_iterator == other.m_it.object_iterator);\n\n            case value_t::array:\n                return (m_it.array_iterator == other.m_it.array_iterator);\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                return (m_it.primitive_iterator == other.m_it.primitive_iterator);\n        }\n    }\n\n    /*!\n    @brief comparison: not equal\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >\n    bool operator!=(const IterImpl& other) const\n    {\n        return !operator==(other);\n    }\n\n    /*!\n    @brief comparison: smaller\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    bool operator<(const iter_impl& other) const\n    {\n        // if objects are not the same, the comparison is undefined\n        if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(212, \"cannot compare iterators of different containers\", m_object));\n        }\n\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n                JSON_THROW(invalid_iterator::create(213, \"cannot compare order of object iterators\", m_object));\n\n            case value_t::array:\n                return (m_it.array_iterator < other.m_it.array_iterator);\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                return (m_it.primitive_iterator < other.m_it.primitive_iterator);\n        }\n    }\n\n    /*!\n    @brief comparison: less than or equal\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    bool operator<=(const iter_impl& other) const\n    {\n        return !other.operator < (*this);\n    }\n\n    /*!\n    @brief comparison: greater than\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    bool operator>(const iter_impl& other) const\n    {\n        return !operator<=(other);\n    }\n\n    /*!\n    @brief comparison: greater than or equal\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    bool operator>=(const iter_impl& other) const\n    {\n        return !operator<(other);\n    }\n\n    /*!\n    @brief add to iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl& operator+=(difference_type i)\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n                JSON_THROW(invalid_iterator::create(209, \"cannot use offsets with object iterators\", m_object));\n\n            case value_t::array:\n            {\n                std::advance(m_it.array_iterator, i);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                m_it.primitive_iterator += i;\n                break;\n            }\n        }\n\n        return *this;\n    }\n\n    /*!\n    @brief subtract from iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl& operator-=(difference_type i)\n    {\n        return operator+=(-i);\n    }\n\n    /*!\n    @brief add to iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl operator+(difference_type i) const\n    {\n        auto result = *this;\n        result += i;\n        return result;\n    }\n\n    /*!\n    @brief addition of distance and iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    friend iter_impl operator+(difference_type i, const iter_impl& it)\n    {\n        auto result = it;\n        result += i;\n        return result;\n    }\n\n    /*!\n    @brief subtract from iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    iter_impl operator-(difference_type i) const\n    {\n        auto result = *this;\n        result -= i;\n        return result;\n    }\n\n    /*!\n    @brief return difference\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    difference_type operator-(const iter_impl& other) const\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n                JSON_THROW(invalid_iterator::create(209, \"cannot use offsets with object iterators\", m_object));\n\n            case value_t::array:\n                return m_it.array_iterator - other.m_it.array_iterator;\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                return m_it.primitive_iterator - other.m_it.primitive_iterator;\n        }\n    }\n\n    /*!\n    @brief access to successor\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    reference operator[](difference_type n) const\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        switch (m_object->m_data.m_type)\n        {\n            case value_t::object:\n                JSON_THROW(invalid_iterator::create(208, \"cannot use operator[] for object iterators\", m_object));\n\n            case value_t::array:\n                return *std::next(m_it.array_iterator, n);\n\n            case value_t::null:\n                JSON_THROW(invalid_iterator::create(214, \"cannot get value\", m_object));\n\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n))\n                {\n                    return *m_object;\n                }\n\n                JSON_THROW(invalid_iterator::create(214, \"cannot get value\", m_object));\n            }\n        }\n    }\n\n    /*!\n    @brief return the key of an object iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    const typename object_t::key_type& key() const\n    {\n        JSON_ASSERT(m_object != nullptr);\n\n        if (JSON_HEDLEY_LIKELY(m_object->is_object()))\n        {\n            return m_it.object_iterator->first;\n        }\n\n        JSON_THROW(invalid_iterator::create(207, \"cannot use key() for non-object iterators\", m_object));\n    }\n\n    /*!\n    @brief return the value of an iterator\n    @pre The iterator is initialized; i.e. `m_object != nullptr`.\n    */\n    reference value() const\n    {\n        return operator*();\n    }\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    /// associated JSON instance\n    pointer m_object = nullptr;\n    /// the actual iterator of the associated instance\n    internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {};\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/iterators/iteration_proxy.hpp>\n\n// #include <nlohmann/detail/iterators/json_reverse_iterator.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <cstddef> // ptrdiff_t\n#include <iterator> // reverse_iterator\n#include <utility> // declval\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n//////////////////////\n// reverse_iterator //\n//////////////////////\n\n/*!\n@brief a template for a reverse iterator class\n\n@tparam Base the base iterator type to reverse. Valid types are @ref\niterator (to create @ref reverse_iterator) and @ref const_iterator (to\ncreate @ref const_reverse_iterator).\n\n@requirement The class satisfies the following concept requirements:\n-\n[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator):\n  The iterator that can be moved can be moved in both directions (i.e.\n  incremented and decremented).\n- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator):\n  It is possible to write to the pointed-to element (only if @a Base is\n  @ref iterator).\n\n@since version 1.0.0\n*/\ntemplate<typename Base>\nclass json_reverse_iterator : public std::reverse_iterator<Base>\n{\n  public:\n    using difference_type = std::ptrdiff_t;\n    /// shortcut to the reverse iterator adapter\n    using base_iterator = std::reverse_iterator<Base>;\n    /// the reference type for the pointed-to element\n    using reference = typename Base::reference;\n\n    /// create reverse iterator from iterator\n    explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept\n        : base_iterator(it) {}\n\n    /// create reverse iterator from base class\n    explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {}\n\n    /// post-increment (it++)\n    json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp)\n    {\n        return static_cast<json_reverse_iterator>(base_iterator::operator++(1));\n    }\n\n    /// pre-increment (++it)\n    json_reverse_iterator& operator++()\n    {\n        return static_cast<json_reverse_iterator&>(base_iterator::operator++());\n    }\n\n    /// post-decrement (it--)\n    json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp)\n    {\n        return static_cast<json_reverse_iterator>(base_iterator::operator--(1));\n    }\n\n    /// pre-decrement (--it)\n    json_reverse_iterator& operator--()\n    {\n        return static_cast<json_reverse_iterator&>(base_iterator::operator--());\n    }\n\n    /// add to iterator\n    json_reverse_iterator& operator+=(difference_type i)\n    {\n        return static_cast<json_reverse_iterator&>(base_iterator::operator+=(i));\n    }\n\n    /// add to iterator\n    json_reverse_iterator operator+(difference_type i) const\n    {\n        return static_cast<json_reverse_iterator>(base_iterator::operator+(i));\n    }\n\n    /// subtract from iterator\n    json_reverse_iterator operator-(difference_type i) const\n    {\n        return static_cast<json_reverse_iterator>(base_iterator::operator-(i));\n    }\n\n    /// return difference\n    difference_type operator-(const json_reverse_iterator& other) const\n    {\n        return base_iterator(*this) - base_iterator(other);\n    }\n\n    /// access to successor\n    reference operator[](difference_type n) const\n    {\n        return *(this->operator+(n));\n    }\n\n    /// return the key of an object iterator\n    auto key() const -> decltype(std::declval<Base>().key())\n    {\n        auto it = --this->base();\n        return it.key();\n    }\n\n    /// return the value of an iterator\n    reference value() const\n    {\n        auto it = --this->base();\n        return it.operator * ();\n    }\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/iterators/primitive_iterator.hpp>\n\n// #include <nlohmann/detail/json_custom_base_class.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <type_traits> // conditional, is_same\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/*!\n@brief Default base class of the @ref basic_json class.\n\nSo that the correct implementations of the copy / move ctors / assign operators\nof @ref basic_json do not require complex case distinctions\n(no base class / custom base class used as customization point),\n@ref basic_json always has a base class.\nBy default, this class is used because it is empty and thus has no effect\non the behavior of @ref basic_json.\n*/\nstruct json_default_base {};\n\ntemplate<class T>\nusing json_base_class = typename std::conditional <\n                        std::is_same<T, void>::value,\n                        json_default_base,\n                        T\n                        >::type;\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/json_pointer.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // all_of\n#include <cctype> // isdigit\n#include <cerrno> // errno, ERANGE\n#include <cstdlib> // strtoull\n#ifndef JSON_NO_IO\n    #include <iosfwd> // ostream\n#endif  // JSON_NO_IO\n#include <limits> // max\n#include <numeric> // accumulate\n#include <string> // string\n#include <utility> // move\n#include <vector> // vector\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/string_escape.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document\n/// @sa https://json.nlohmann.me/api/json_pointer/\ntemplate<typename RefStringType>\nclass json_pointer\n{\n    // allow basic_json to access private members\n    NLOHMANN_BASIC_JSON_TPL_DECLARATION\n    friend class basic_json;\n\n    template<typename>\n    friend class json_pointer;\n\n    template<typename T>\n    struct string_t_helper\n    {\n        using type = T;\n    };\n\n    NLOHMANN_BASIC_JSON_TPL_DECLARATION\n    struct string_t_helper<NLOHMANN_BASIC_JSON_TPL>\n    {\n        using type = StringType;\n    };\n\n  public:\n    // for backwards compatibility accept BasicJsonType\n    using string_t = typename string_t_helper<RefStringType>::type;\n\n    /// @brief create JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/\n    explicit json_pointer(const string_t& s = \"\")\n        : reference_tokens(split(s))\n    {}\n\n    /// @brief return a string representation of the JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/to_string/\n    string_t to_string() const\n    {\n        return std::accumulate(reference_tokens.begin(), reference_tokens.end(),\n                               string_t{},\n                               [](const string_t& a, const string_t& b)\n        {\n            return detail::concat(a, '/', detail::escape(b));\n        });\n    }\n\n    /// @brief return a string representation of the JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string())\n    operator string_t() const\n    {\n        return to_string();\n    }\n\n#ifndef JSON_NO_IO\n    /// @brief write string representation of the JSON pointer to stream\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/\n    friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)\n    {\n        o << ptr.to_string();\n        return o;\n    }\n#endif\n\n    /// @brief append another JSON pointer at the end of this JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/\n    json_pointer& operator/=(const json_pointer& ptr)\n    {\n        reference_tokens.insert(reference_tokens.end(),\n                                ptr.reference_tokens.begin(),\n                                ptr.reference_tokens.end());\n        return *this;\n    }\n\n    /// @brief append an unescaped reference token at the end of this JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/\n    json_pointer& operator/=(string_t token)\n    {\n        push_back(std::move(token));\n        return *this;\n    }\n\n    /// @brief append an array index at the end of this JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/\n    json_pointer& operator/=(std::size_t array_idx)\n    {\n        return *this /= std::to_string(array_idx);\n    }\n\n    /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/\n    friend json_pointer operator/(const json_pointer& lhs,\n                                  const json_pointer& rhs)\n    {\n        return json_pointer(lhs) /= rhs;\n    }\n\n    /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/\n    friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param)\n    {\n        return json_pointer(lhs) /= std::move(token);\n    }\n\n    /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/\n    friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx)\n    {\n        return json_pointer(lhs) /= array_idx;\n    }\n\n    /// @brief returns the parent of this JSON pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/\n    json_pointer parent_pointer() const\n    {\n        if (empty())\n        {\n            return *this;\n        }\n\n        json_pointer res = *this;\n        res.pop_back();\n        return res;\n    }\n\n    /// @brief remove last reference token\n    /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/\n    void pop_back()\n    {\n        if (JSON_HEDLEY_UNLIKELY(empty()))\n        {\n            JSON_THROW(detail::out_of_range::create(405, \"JSON pointer has no parent\", nullptr));\n        }\n\n        reference_tokens.pop_back();\n    }\n\n    /// @brief return last reference token\n    /// @sa https://json.nlohmann.me/api/json_pointer/back/\n    const string_t& back() const\n    {\n        if (JSON_HEDLEY_UNLIKELY(empty()))\n        {\n            JSON_THROW(detail::out_of_range::create(405, \"JSON pointer has no parent\", nullptr));\n        }\n\n        return reference_tokens.back();\n    }\n\n    /// @brief append an unescaped token at the end of the reference pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/push_back/\n    void push_back(const string_t& token)\n    {\n        reference_tokens.push_back(token);\n    }\n\n    /// @brief append an unescaped token at the end of the reference pointer\n    /// @sa https://json.nlohmann.me/api/json_pointer/push_back/\n    void push_back(string_t&& token)\n    {\n        reference_tokens.push_back(std::move(token));\n    }\n\n    /// @brief return whether pointer points to the root document\n    /// @sa https://json.nlohmann.me/api/json_pointer/empty/\n    bool empty() const noexcept\n    {\n        return reference_tokens.empty();\n    }\n\n  private:\n    /*!\n    @param[in] s  reference token to be converted into an array index\n\n    @return integer representation of @a s\n\n    @throw parse_error.106  if an array index begins with '0'\n    @throw parse_error.109  if an array index begins not with a digit\n    @throw out_of_range.404 if string @a s could not be converted to an integer\n    @throw out_of_range.410 if an array index exceeds size_type\n    */\n    template<typename BasicJsonType>\n    static typename BasicJsonType::size_type array_index(const string_t& s)\n    {\n        using size_type = typename BasicJsonType::size_type;\n\n        // error condition (cf. RFC 6901, Sect. 4)\n        if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0'))\n        {\n            JSON_THROW(detail::parse_error::create(106, 0, detail::concat(\"array index '\", s, \"' must not begin with '0'\"), nullptr));\n        }\n\n        // error condition (cf. RFC 6901, Sect. 4)\n        if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9')))\n        {\n            JSON_THROW(detail::parse_error::create(109, 0, detail::concat(\"array index '\", s, \"' is not a number\"), nullptr));\n        }\n\n        const char* p = s.c_str();\n        char* p_end = nullptr;\n        errno = 0; // strtoull doesn't reset errno\n        const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int)\n        if (p == p_end // invalid input or empty string\n                || errno == ERANGE // out of range\n                || JSON_HEDLEY_UNLIKELY(static_cast<std::size_t>(p_end - p) != s.size())) // incomplete read\n        {\n            JSON_THROW(detail::out_of_range::create(404, detail::concat(\"unresolved reference token '\", s, \"'\"), nullptr));\n        }\n\n        // only triggered on special platforms (like 32bit), see also\n        // https://github.com/nlohmann/json/pull/2203\n        if (res >= static_cast<unsigned long long>((std::numeric_limits<size_type>::max)()))  // NOLINT(runtime/int)\n        {\n            JSON_THROW(detail::out_of_range::create(410, detail::concat(\"array index \", s, \" exceeds size_type\"), nullptr));   // LCOV_EXCL_LINE\n        }\n\n        return static_cast<size_type>(res);\n    }\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    json_pointer top() const\n    {\n        if (JSON_HEDLEY_UNLIKELY(empty()))\n        {\n            JSON_THROW(detail::out_of_range::create(405, \"JSON pointer has no parent\", nullptr));\n        }\n\n        json_pointer result = *this;\n        result.reference_tokens = {reference_tokens[0]};\n        return result;\n    }\n\n  private:\n    /*!\n    @brief create and return a reference to the pointed to value\n\n    @complexity Linear in the number of reference tokens.\n\n    @throw parse_error.109 if array index is not a number\n    @throw type_error.313 if value cannot be unflattened\n    */\n    template<typename BasicJsonType>\n    BasicJsonType& get_and_create(BasicJsonType& j) const\n    {\n        auto* result = &j;\n\n        // in case no reference tokens exist, return a reference to the JSON value\n        // j which will be overwritten by a primitive value\n        for (const auto& reference_token : reference_tokens)\n        {\n            switch (result->type())\n            {\n                case detail::value_t::null:\n                {\n                    if (reference_token == \"0\")\n                    {\n                        // start a new array if reference token is 0\n                        result = &result->operator[](0);\n                    }\n                    else\n                    {\n                        // start a new object otherwise\n                        result = &result->operator[](reference_token);\n                    }\n                    break;\n                }\n\n                case detail::value_t::object:\n                {\n                    // create an entry in the object\n                    result = &result->operator[](reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    // create an entry in the array\n                    result = &result->operator[](array_index<BasicJsonType>(reference_token));\n                    break;\n                }\n\n                /*\n                The following code is only reached if there exists a reference\n                token _and_ the current value is primitive. In this case, we have\n                an error situation, because primitive values may only occur as\n                single value; that is, with an empty list of reference tokens.\n                */\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                    JSON_THROW(detail::type_error::create(313, \"invalid value to unflatten\", &j));\n            }\n        }\n\n        return *result;\n    }\n\n    /*!\n    @brief return a reference to the pointed to value\n\n    @note This version does not throw if a value is not present, but tries to\n          create nested values instead. For instance, calling this function\n          with pointer `\"/this/that\"` on a null value is equivalent to calling\n          `operator[](\"this\").operator[](\"that\")` on that value, effectively\n          changing the null value to an object.\n\n    @param[in] ptr  a JSON value\n\n    @return reference to the JSON value pointed to by the JSON pointer\n\n    @complexity Linear in the length of the JSON pointer.\n\n    @throw parse_error.106   if an array index begins with '0'\n    @throw parse_error.109   if an array index was not a number\n    @throw out_of_range.404  if the JSON pointer can not be resolved\n    */\n    template<typename BasicJsonType>\n    BasicJsonType& get_unchecked(BasicJsonType* ptr) const\n    {\n        for (const auto& reference_token : reference_tokens)\n        {\n            // convert null values to arrays or objects before continuing\n            if (ptr->is_null())\n            {\n                // check if reference token is a number\n                const bool nums =\n                    std::all_of(reference_token.begin(), reference_token.end(),\n                                [](const unsigned char x)\n                {\n                    return std::isdigit(x);\n                });\n\n                // change value to array for numbers or \"-\" or to object otherwise\n                *ptr = (nums || reference_token == \"-\")\n                       ? detail::value_t::array\n                       : detail::value_t::object;\n            }\n\n            switch (ptr->type())\n            {\n                case detail::value_t::object:\n                {\n                    // use unchecked object access\n                    ptr = &ptr->operator[](reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    if (reference_token == \"-\")\n                    {\n                        // explicitly treat \"-\" as index beyond the end\n                        ptr = &ptr->operator[](ptr->m_data.m_value.array->size());\n                    }\n                    else\n                    {\n                        // convert array index to number; unchecked access\n                        ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token));\n                    }\n                    break;\n                }\n\n                case detail::value_t::null:\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                    JSON_THROW(detail::out_of_range::create(404, detail::concat(\"unresolved reference token '\", reference_token, \"'\"), ptr));\n            }\n        }\n\n        return *ptr;\n    }\n\n    /*!\n    @throw parse_error.106   if an array index begins with '0'\n    @throw parse_error.109   if an array index was not a number\n    @throw out_of_range.402  if the array index '-' is used\n    @throw out_of_range.404  if the JSON pointer can not be resolved\n    */\n    template<typename BasicJsonType>\n    BasicJsonType& get_checked(BasicJsonType* ptr) const\n    {\n        for (const auto& reference_token : reference_tokens)\n        {\n            switch (ptr->type())\n            {\n                case detail::value_t::object:\n                {\n                    // note: at performs range check\n                    ptr = &ptr->at(reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(reference_token == \"-\"))\n                    {\n                        // \"-\" always fails the range check\n                        JSON_THROW(detail::out_of_range::create(402, detail::concat(\n                                \"array index '-' (\", std::to_string(ptr->m_data.m_value.array->size()),\n                                \") is out of range\"), ptr));\n                    }\n\n                    // note: at performs range check\n                    ptr = &ptr->at(array_index<BasicJsonType>(reference_token));\n                    break;\n                }\n\n                case detail::value_t::null:\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                    JSON_THROW(detail::out_of_range::create(404, detail::concat(\"unresolved reference token '\", reference_token, \"'\"), ptr));\n            }\n        }\n\n        return *ptr;\n    }\n\n    /*!\n    @brief return a const reference to the pointed to value\n\n    @param[in] ptr  a JSON value\n\n    @return const reference to the JSON value pointed to by the JSON\n    pointer\n\n    @throw parse_error.106   if an array index begins with '0'\n    @throw parse_error.109   if an array index was not a number\n    @throw out_of_range.402  if the array index '-' is used\n    @throw out_of_range.404  if the JSON pointer can not be resolved\n    */\n    template<typename BasicJsonType>\n    const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const\n    {\n        for (const auto& reference_token : reference_tokens)\n        {\n            switch (ptr->type())\n            {\n                case detail::value_t::object:\n                {\n                    // use unchecked object access\n                    ptr = &ptr->operator[](reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(reference_token == \"-\"))\n                    {\n                        // \"-\" cannot be used for const access\n                        JSON_THROW(detail::out_of_range::create(402, detail::concat(\"array index '-' (\", std::to_string(ptr->m_data.m_value.array->size()), \") is out of range\"), ptr));\n                    }\n\n                    // use unchecked array access\n                    ptr = &ptr->operator[](array_index<BasicJsonType>(reference_token));\n                    break;\n                }\n\n                case detail::value_t::null:\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                    JSON_THROW(detail::out_of_range::create(404, detail::concat(\"unresolved reference token '\", reference_token, \"'\"), ptr));\n            }\n        }\n\n        return *ptr;\n    }\n\n    /*!\n    @throw parse_error.106   if an array index begins with '0'\n    @throw parse_error.109   if an array index was not a number\n    @throw out_of_range.402  if the array index '-' is used\n    @throw out_of_range.404  if the JSON pointer can not be resolved\n    */\n    template<typename BasicJsonType>\n    const BasicJsonType& get_checked(const BasicJsonType* ptr) const\n    {\n        for (const auto& reference_token : reference_tokens)\n        {\n            switch (ptr->type())\n            {\n                case detail::value_t::object:\n                {\n                    // note: at performs range check\n                    ptr = &ptr->at(reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(reference_token == \"-\"))\n                    {\n                        // \"-\" always fails the range check\n                        JSON_THROW(detail::out_of_range::create(402, detail::concat(\n                                \"array index '-' (\", std::to_string(ptr->m_data.m_value.array->size()),\n                                \") is out of range\"), ptr));\n                    }\n\n                    // note: at performs range check\n                    ptr = &ptr->at(array_index<BasicJsonType>(reference_token));\n                    break;\n                }\n\n                case detail::value_t::null:\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                    JSON_THROW(detail::out_of_range::create(404, detail::concat(\"unresolved reference token '\", reference_token, \"'\"), ptr));\n            }\n        }\n\n        return *ptr;\n    }\n\n    /*!\n    @throw parse_error.106   if an array index begins with '0'\n    @throw parse_error.109   if an array index was not a number\n    */\n    template<typename BasicJsonType>\n    bool contains(const BasicJsonType* ptr) const\n    {\n        for (const auto& reference_token : reference_tokens)\n        {\n            switch (ptr->type())\n            {\n                case detail::value_t::object:\n                {\n                    if (!ptr->contains(reference_token))\n                    {\n                        // we did not find the key in the object\n                        return false;\n                    }\n\n                    ptr = &ptr->operator[](reference_token);\n                    break;\n                }\n\n                case detail::value_t::array:\n                {\n                    if (JSON_HEDLEY_UNLIKELY(reference_token == \"-\"))\n                    {\n                        // \"-\" always fails the range check\n                        return false;\n                    }\n                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !(\"0\" <= reference_token && reference_token <= \"9\")))\n                    {\n                        // invalid char\n                        return false;\n                    }\n                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1))\n                    {\n                        if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))\n                        {\n                            // first char should be between '1' and '9'\n                            return false;\n                        }\n                        for (std::size_t i = 1; i < reference_token.size(); i++)\n                        {\n                            if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9')))\n                            {\n                                // other char should be between '0' and '9'\n                                return false;\n                            }\n                        }\n                    }\n\n                    const auto idx = array_index<BasicJsonType>(reference_token);\n                    if (idx >= ptr->size())\n                    {\n                        // index out of range\n                        return false;\n                    }\n\n                    ptr = &ptr->operator[](idx);\n                    break;\n                }\n\n                case detail::value_t::null:\n                case detail::value_t::string:\n                case detail::value_t::boolean:\n                case detail::value_t::number_integer:\n                case detail::value_t::number_unsigned:\n                case detail::value_t::number_float:\n                case detail::value_t::binary:\n                case detail::value_t::discarded:\n                default:\n                {\n                    // we do not expect primitive values if there is still a\n                    // reference token to process\n                    return false;\n                }\n            }\n        }\n\n        // no reference token left means we found a primitive value\n        return true;\n    }\n\n    /*!\n    @brief split the string input to reference tokens\n\n    @note This function is only called by the json_pointer constructor.\n          All exceptions below are documented there.\n\n    @throw parse_error.107  if the pointer is not empty or begins with '/'\n    @throw parse_error.108  if character '~' is not followed by '0' or '1'\n    */\n    static std::vector<string_t> split(const string_t& reference_string)\n    {\n        std::vector<string_t> result;\n\n        // special case: empty reference string -> no reference tokens\n        if (reference_string.empty())\n        {\n            return result;\n        }\n\n        // check if nonempty reference string begins with slash\n        if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))\n        {\n            JSON_THROW(detail::parse_error::create(107, 1, detail::concat(\"JSON pointer must be empty or begin with '/' - was: '\", reference_string, \"'\"), nullptr));\n        }\n\n        // extract the reference tokens:\n        // - slash: position of the last read slash (or end of string)\n        // - start: position after the previous slash\n        for (\n            // search for the first slash after the first character\n            std::size_t slash = reference_string.find_first_of('/', 1),\n            // set the beginning of the first reference token\n            start = 1;\n            // we can stop if start == 0 (if slash == string_t::npos)\n            start != 0;\n            // set the beginning of the next reference token\n            // (will eventually be 0 if slash == string_t::npos)\n            start = (slash == string_t::npos) ? 0 : slash + 1,\n            // find next slash\n            slash = reference_string.find_first_of('/', start))\n        {\n            // use the text between the beginning of the reference token\n            // (start) and the last slash (slash).\n            auto reference_token = reference_string.substr(start, slash - start);\n\n            // check reference tokens are properly escaped\n            for (std::size_t pos = reference_token.find_first_of('~');\n                    pos != string_t::npos;\n                    pos = reference_token.find_first_of('~', pos + 1))\n            {\n                JSON_ASSERT(reference_token[pos] == '~');\n\n                // ~ must be followed by 0 or 1\n                if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 ||\n                                         (reference_token[pos + 1] != '0' &&\n                                          reference_token[pos + 1] != '1')))\n                {\n                    JSON_THROW(detail::parse_error::create(108, 0, \"escape character '~' must be followed with '0' or '1'\", nullptr));\n                }\n            }\n\n            // finally, store the reference token\n            detail::unescape(reference_token);\n            result.push_back(reference_token);\n        }\n\n        return result;\n    }\n\n  private:\n    /*!\n    @param[in] reference_string  the reference string to the current value\n    @param[in] value             the value to consider\n    @param[in,out] result        the result object to insert values to\n\n    @note Empty objects or arrays are flattened to `null`.\n    */\n    template<typename BasicJsonType>\n    static void flatten(const string_t& reference_string,\n                        const BasicJsonType& value,\n                        BasicJsonType& result)\n    {\n        switch (value.type())\n        {\n            case detail::value_t::array:\n            {\n                if (value.m_data.m_value.array->empty())\n                {\n                    // flatten empty array as null\n                    result[reference_string] = nullptr;\n                }\n                else\n                {\n                    // iterate array and use index as reference string\n                    for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)\n                    {\n                        flatten(detail::concat(reference_string, '/', std::to_string(i)),\n                                value.m_data.m_value.array->operator[](i), result);\n                    }\n                }\n                break;\n            }\n\n            case detail::value_t::object:\n            {\n                if (value.m_data.m_value.object->empty())\n                {\n                    // flatten empty object as null\n                    result[reference_string] = nullptr;\n                }\n                else\n                {\n                    // iterate object and use keys as reference string\n                    for (const auto& element : *value.m_data.m_value.object)\n                    {\n                        flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result);\n                    }\n                }\n                break;\n            }\n\n            case detail::value_t::null:\n            case detail::value_t::string:\n            case detail::value_t::boolean:\n            case detail::value_t::number_integer:\n            case detail::value_t::number_unsigned:\n            case detail::value_t::number_float:\n            case detail::value_t::binary:\n            case detail::value_t::discarded:\n            default:\n            {\n                // add primitive value with its reference string\n                result[reference_string] = value;\n                break;\n            }\n        }\n    }\n\n    /*!\n    @param[in] value  flattened JSON\n\n    @return unflattened JSON\n\n    @throw parse_error.109 if array index is not a number\n    @throw type_error.314  if value is not an object\n    @throw type_error.315  if object values are not primitive\n    @throw type_error.313  if value cannot be unflattened\n    */\n    template<typename BasicJsonType>\n    static BasicJsonType\n    unflatten(const BasicJsonType& value)\n    {\n        if (JSON_HEDLEY_UNLIKELY(!value.is_object()))\n        {\n            JSON_THROW(detail::type_error::create(314, \"only objects can be unflattened\", &value));\n        }\n\n        BasicJsonType result;\n\n        // iterate the JSON object values\n        for (const auto& element : *value.m_data.m_value.object)\n        {\n            if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive()))\n            {\n                JSON_THROW(detail::type_error::create(315, \"values in object must be primitive\", &element.second));\n            }\n\n            // assign value to reference pointed to by JSON pointer; Note that if\n            // the JSON pointer is \"\" (i.e., points to the whole value), function\n            // get_and_create returns a reference to result itself. An assignment\n            // will then create a primitive value.\n            json_pointer(element.first).get_and_create(result) = element.second;\n        }\n\n        return result;\n    }\n\n    // can't use conversion operator because of ambiguity\n    json_pointer<string_t> convert() const&\n    {\n        json_pointer<string_t> result;\n        result.reference_tokens = reference_tokens;\n        return result;\n    }\n\n    json_pointer<string_t> convert()&&\n    {\n        json_pointer<string_t> result;\n        result.reference_tokens = std::move(reference_tokens);\n        return result;\n    }\n\n  public:\n#if JSON_HAS_THREE_WAY_COMPARISON\n    /// @brief compares two JSON pointers for equality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/\n    template<typename RefStringTypeRhs>\n    bool operator==(const json_pointer<RefStringTypeRhs>& rhs) const noexcept\n    {\n        return reference_tokens == rhs.reference_tokens;\n    }\n\n    /// @brief compares JSON pointer and string for equality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer))\n    bool operator==(const string_t& rhs) const\n    {\n        return *this == json_pointer(rhs);\n    }\n\n    /// @brief 3-way compares two JSON pointers\n    template<typename RefStringTypeRhs>\n    std::strong_ordering operator<=>(const json_pointer<RefStringTypeRhs>& rhs) const noexcept // *NOPAD*\n    {\n        return  reference_tokens <=> rhs.reference_tokens; // *NOPAD*\n    }\n#else\n    /// @brief compares two JSON pointers for equality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/\n    template<typename RefStringTypeLhs, typename RefStringTypeRhs>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,\n                           const json_pointer<RefStringTypeRhs>& rhs) noexcept;\n\n    /// @brief compares JSON pointer and string for equality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/\n    template<typename RefStringTypeLhs, typename StringType>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,\n                           const StringType& rhs);\n\n    /// @brief compares string and JSON pointer for equality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/\n    template<typename RefStringTypeRhs, typename StringType>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator==(const StringType& lhs,\n                           const json_pointer<RefStringTypeRhs>& rhs);\n\n    /// @brief compares two JSON pointers for inequality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/\n    template<typename RefStringTypeLhs, typename RefStringTypeRhs>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,\n                           const json_pointer<RefStringTypeRhs>& rhs) noexcept;\n\n    /// @brief compares JSON pointer and string for inequality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/\n    template<typename RefStringTypeLhs, typename StringType>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,\n                           const StringType& rhs);\n\n    /// @brief compares string and JSON pointer for inequality\n    /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/\n    template<typename RefStringTypeRhs, typename StringType>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator!=(const StringType& lhs,\n                           const json_pointer<RefStringTypeRhs>& rhs);\n\n    /// @brief compares two JSON pointer for less-than\n    template<typename RefStringTypeLhs, typename RefStringTypeRhs>\n    // NOLINTNEXTLINE(readability-redundant-declaration)\n    friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs,\n                          const json_pointer<RefStringTypeRhs>& rhs) noexcept;\n#endif\n\n  private:\n    /// the reference tokens\n    std::vector<string_t> reference_tokens;\n};\n\n#if !JSON_HAS_THREE_WAY_COMPARISON\n// functions cannot be defined inside class due to ODR violations\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\ninline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,\n                       const json_pointer<RefStringTypeRhs>& rhs) noexcept\n{\n    return lhs.reference_tokens == rhs.reference_tokens;\n}\n\ntemplate<typename RefStringTypeLhs,\n         typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>\nJSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))\ninline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,\n                       const StringType& rhs)\n{\n    return lhs == json_pointer<RefStringTypeLhs>(rhs);\n}\n\ntemplate<typename RefStringTypeRhs,\n         typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>\nJSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))\ninline bool operator==(const StringType& lhs,\n                       const json_pointer<RefStringTypeRhs>& rhs)\n{\n    return json_pointer<RefStringTypeRhs>(lhs) == rhs;\n}\n\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\ninline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,\n                       const json_pointer<RefStringTypeRhs>& rhs) noexcept\n{\n    return !(lhs == rhs);\n}\n\ntemplate<typename RefStringTypeLhs,\n         typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>\nJSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))\ninline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,\n                       const StringType& rhs)\n{\n    return !(lhs == rhs);\n}\n\ntemplate<typename RefStringTypeRhs,\n         typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>\nJSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))\ninline bool operator!=(const StringType& lhs,\n                       const json_pointer<RefStringTypeRhs>& rhs)\n{\n    return !(lhs == rhs);\n}\n\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\ninline bool operator<(const json_pointer<RefStringTypeLhs>& lhs,\n                      const json_pointer<RefStringTypeRhs>& rhs) noexcept\n{\n    return lhs.reference_tokens < rhs.reference_tokens;\n}\n#endif\n\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/json_ref.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <initializer_list>\n#include <utility>\n\n// #include <nlohmann/detail/abi_macros.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\ntemplate<typename BasicJsonType>\nclass json_ref\n{\n  public:\n    using value_type = BasicJsonType;\n\n    json_ref(value_type&& value)\n        : owned_value(std::move(value))\n    {}\n\n    json_ref(const value_type& value)\n        : value_ref(&value)\n    {}\n\n    json_ref(std::initializer_list<json_ref> init)\n        : owned_value(init)\n    {}\n\n    template <\n        class... Args,\n        enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >\n    json_ref(Args && ... args)\n        : owned_value(std::forward<Args>(args)...)\n    {}\n\n    // class should be movable only\n    json_ref(json_ref&&) noexcept = default;\n    json_ref(const json_ref&) = delete;\n    json_ref& operator=(const json_ref&) = delete;\n    json_ref& operator=(json_ref&&) = delete;\n    ~json_ref() = default;\n\n    value_type moved_or_copied() const\n    {\n        if (value_ref == nullptr)\n        {\n            return std::move(owned_value);\n        }\n        return *value_ref;\n    }\n\n    value_type const& operator*() const\n    {\n        return value_ref ? *value_ref : owned_value;\n    }\n\n    value_type const* operator->() const\n    {\n        return &** this;\n    }\n\n  private:\n    mutable value_type owned_value = nullptr;\n    value_type const* value_ref = nullptr;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/string_escape.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n// #include <nlohmann/detail/output/binary_writer.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // reverse\n#include <array> // array\n#include <map> // map\n#include <cmath> // isnan, isinf\n#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t\n#include <cstring> // memcpy\n#include <limits> // numeric_limits\n#include <string> // string\n#include <utility> // move\n#include <vector> // vector\n\n// #include <nlohmann/detail/input/binary_reader.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/output/output_adapters.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // copy\n#include <cstddef> // size_t\n#include <iterator> // back_inserter\n#include <memory> // shared_ptr, make_shared\n#include <string> // basic_string\n#include <vector> // vector\n\n#ifndef JSON_NO_IO\n    #include <ios>      // streamsize\n    #include <ostream>  // basic_ostream\n#endif  // JSON_NO_IO\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/// abstract output adapter interface\ntemplate<typename CharType> struct output_adapter_protocol\n{\n    virtual void write_character(CharType c) = 0;\n    virtual void write_characters(const CharType* s, std::size_t length) = 0;\n    virtual ~output_adapter_protocol() = default;\n\n    output_adapter_protocol() = default;\n    output_adapter_protocol(const output_adapter_protocol&) = default;\n    output_adapter_protocol(output_adapter_protocol&&) noexcept = default;\n    output_adapter_protocol& operator=(const output_adapter_protocol&) = default;\n    output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default;\n};\n\n/// a type to simplify interfaces\ntemplate<typename CharType>\nusing output_adapter_t = std::shared_ptr<output_adapter_protocol<CharType>>;\n\n/// output adapter for byte vectors\ntemplate<typename CharType, typename AllocatorType = std::allocator<CharType>>\nclass output_vector_adapter : public output_adapter_protocol<CharType>\n{\n  public:\n    explicit output_vector_adapter(std::vector<CharType, AllocatorType>& vec) noexcept\n        : v(vec)\n    {}\n\n    void write_character(CharType c) override\n    {\n        v.push_back(c);\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    void write_characters(const CharType* s, std::size_t length) override\n    {\n        v.insert(v.end(), s, s + length);\n    }\n\n  private:\n    std::vector<CharType, AllocatorType>& v;\n};\n\n#ifndef JSON_NO_IO\n/// output adapter for output streams\ntemplate<typename CharType>\nclass output_stream_adapter : public output_adapter_protocol<CharType>\n{\n  public:\n    explicit output_stream_adapter(std::basic_ostream<CharType>& s) noexcept\n        : stream(s)\n    {}\n\n    void write_character(CharType c) override\n    {\n        stream.put(c);\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    void write_characters(const CharType* s, std::size_t length) override\n    {\n        stream.write(s, static_cast<std::streamsize>(length));\n    }\n\n  private:\n    std::basic_ostream<CharType>& stream;\n};\n#endif  // JSON_NO_IO\n\n/// output adapter for basic_string\ntemplate<typename CharType, typename StringType = std::basic_string<CharType>>\nclass output_string_adapter : public output_adapter_protocol<CharType>\n{\n  public:\n    explicit output_string_adapter(StringType& s) noexcept\n        : str(s)\n    {}\n\n    void write_character(CharType c) override\n    {\n        str.push_back(c);\n    }\n\n    JSON_HEDLEY_NON_NULL(2)\n    void write_characters(const CharType* s, std::size_t length) override\n    {\n        str.append(s, length);\n    }\n\n  private:\n    StringType& str;\n};\n\ntemplate<typename CharType, typename StringType = std::basic_string<CharType>>\nclass output_adapter\n{\n  public:\n    template<typename AllocatorType = std::allocator<CharType>>\n    output_adapter(std::vector<CharType, AllocatorType>& vec)\n        : oa(std::make_shared<output_vector_adapter<CharType, AllocatorType>>(vec)) {}\n\n#ifndef JSON_NO_IO\n    output_adapter(std::basic_ostream<CharType>& s)\n        : oa(std::make_shared<output_stream_adapter<CharType>>(s)) {}\n#endif  // JSON_NO_IO\n\n    output_adapter(StringType& s)\n        : oa(std::make_shared<output_string_adapter<CharType, StringType>>(s)) {}\n\n    operator output_adapter_t<CharType>()\n    {\n        return oa;\n    }\n\n  private:\n    output_adapter_t<CharType> oa = nullptr;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n///////////////////\n// binary writer //\n///////////////////\n\n/*!\n@brief serialization to CBOR and MessagePack values\n*/\ntemplate<typename BasicJsonType, typename CharType>\nclass binary_writer\n{\n    using string_t = typename BasicJsonType::string_t;\n    using binary_t = typename BasicJsonType::binary_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n\n  public:\n    /*!\n    @brief create a binary writer\n\n    @param[in] adapter  output adapter to write to\n    */\n    explicit binary_writer(output_adapter_t<CharType> adapter) : oa(std::move(adapter))\n    {\n        JSON_ASSERT(oa);\n    }\n\n    /*!\n    @param[in] j  JSON value to serialize\n    @pre       j.type() == value_t::object\n    */\n    void write_bson(const BasicJsonType& j)\n    {\n        switch (j.type())\n        {\n            case value_t::object:\n            {\n                write_bson_object(*j.m_data.m_value.object);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::array:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                JSON_THROW(type_error::create(317, concat(\"to serialize to BSON, top-level type must be object, but is \", j.type_name()), &j));\n            }\n        }\n    }\n\n    /*!\n    @param[in] j  JSON value to serialize\n    */\n    void write_cbor(const BasicJsonType& j)\n    {\n        switch (j.type())\n        {\n            case value_t::null:\n            {\n                oa->write_character(to_char_type(0xF6));\n                break;\n            }\n\n            case value_t::boolean:\n            {\n                oa->write_character(j.m_data.m_value.boolean\n                                    ? to_char_type(0xF5)\n                                    : to_char_type(0xF4));\n                break;\n            }\n\n            case value_t::number_integer:\n            {\n                if (j.m_data.m_value.number_integer >= 0)\n                {\n                    // CBOR does not differentiate between positive signed\n                    // integers and unsigned integers. Therefore, we used the\n                    // code from the value_t::number_unsigned case here.\n                    if (j.m_data.m_value.number_integer <= 0x17)\n                    {\n                        write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x18));\n                        write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x19));\n                        write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x1A));\n                        write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));\n                    }\n                    else\n                    {\n                        oa->write_character(to_char_type(0x1B));\n                        write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));\n                    }\n                }\n                else\n                {\n                    // The conversions below encode the sign in the first\n                    // byte, and the value is converted to a positive number.\n                    const auto positive_number = -1 - j.m_data.m_value.number_integer;\n                    if (j.m_data.m_value.number_integer >= -24)\n                    {\n                        write_number(static_cast<std::uint8_t>(0x20 + positive_number));\n                    }\n                    else if (positive_number <= (std::numeric_limits<std::uint8_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x38));\n                        write_number(static_cast<std::uint8_t>(positive_number));\n                    }\n                    else if (positive_number <= (std::numeric_limits<std::uint16_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x39));\n                        write_number(static_cast<std::uint16_t>(positive_number));\n                    }\n                    else if (positive_number <= (std::numeric_limits<std::uint32_t>::max)())\n                    {\n                        oa->write_character(to_char_type(0x3A));\n                        write_number(static_cast<std::uint32_t>(positive_number));\n                    }\n                    else\n                    {\n                        oa->write_character(to_char_type(0x3B));\n                        write_number(static_cast<std::uint64_t>(positive_number));\n                    }\n                }\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                if (j.m_data.m_value.number_unsigned <= 0x17)\n                {\n                    write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x18));\n                    write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x19));\n                    write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_unsigned));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x1A));\n                    write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_unsigned));\n                }\n                else\n                {\n                    oa->write_character(to_char_type(0x1B));\n                    write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned));\n                }\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                if (std::isnan(j.m_data.m_value.number_float))\n                {\n                    // NaN is 0xf97e00 in CBOR\n                    oa->write_character(to_char_type(0xF9));\n                    oa->write_character(to_char_type(0x7E));\n                    oa->write_character(to_char_type(0x00));\n                }\n                else if (std::isinf(j.m_data.m_value.number_float))\n                {\n                    // Infinity is 0xf97c00, -Infinity is 0xf9fc00\n                    oa->write_character(to_char_type(0xf9));\n                    oa->write_character(j.m_data.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC));\n                    oa->write_character(to_char_type(0x00));\n                }\n                else\n                {\n                    write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::cbor);\n                }\n                break;\n            }\n\n            case value_t::string:\n            {\n                // step 1: write control byte and the string length\n                const auto N = j.m_data.m_value.string->size();\n                if (N <= 0x17)\n                {\n                    write_number(static_cast<std::uint8_t>(0x60 + N));\n                }\n                else if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x78));\n                    write_number(static_cast<std::uint8_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x79));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x7A));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n                // LCOV_EXCL_START\n                else if (N <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x7B));\n                    write_number(static_cast<std::uint64_t>(N));\n                }\n                // LCOV_EXCL_STOP\n\n                // step 2: write the string\n                oa->write_characters(\n                    reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),\n                    j.m_data.m_value.string->size());\n                break;\n            }\n\n            case value_t::array:\n            {\n                // step 1: write control byte and the array size\n                const auto N = j.m_data.m_value.array->size();\n                if (N <= 0x17)\n                {\n                    write_number(static_cast<std::uint8_t>(0x80 + N));\n                }\n                else if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x98));\n                    write_number(static_cast<std::uint8_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x99));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x9A));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n                // LCOV_EXCL_START\n                else if (N <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x9B));\n                    write_number(static_cast<std::uint64_t>(N));\n                }\n                // LCOV_EXCL_STOP\n\n                // step 2: write each element\n                for (const auto& el : *j.m_data.m_value.array)\n                {\n                    write_cbor(el);\n                }\n                break;\n            }\n\n            case value_t::binary:\n            {\n                if (j.m_data.m_value.binary->has_subtype())\n                {\n                    if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)())\n                    {\n                        write_number(static_cast<std::uint8_t>(0xd8));\n                        write_number(static_cast<std::uint8_t>(j.m_data.m_value.binary->subtype()));\n                    }\n                    else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)())\n                    {\n                        write_number(static_cast<std::uint8_t>(0xd9));\n                        write_number(static_cast<std::uint16_t>(j.m_data.m_value.binary->subtype()));\n                    }\n                    else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)())\n                    {\n                        write_number(static_cast<std::uint8_t>(0xda));\n                        write_number(static_cast<std::uint32_t>(j.m_data.m_value.binary->subtype()));\n                    }\n                    else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)())\n                    {\n                        write_number(static_cast<std::uint8_t>(0xdb));\n                        write_number(static_cast<std::uint64_t>(j.m_data.m_value.binary->subtype()));\n                    }\n                }\n\n                // step 1: write control byte and the binary array size\n                const auto N = j.m_data.m_value.binary->size();\n                if (N <= 0x17)\n                {\n                    write_number(static_cast<std::uint8_t>(0x40 + N));\n                }\n                else if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x58));\n                    write_number(static_cast<std::uint8_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x59));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x5A));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n                // LCOV_EXCL_START\n                else if (N <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    oa->write_character(to_char_type(0x5B));\n                    write_number(static_cast<std::uint64_t>(N));\n                }\n                // LCOV_EXCL_STOP\n\n                // step 2: write each element\n                oa->write_characters(\n                    reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),\n                    N);\n\n                break;\n            }\n\n            case value_t::object:\n            {\n                // step 1: write control byte and the object size\n                const auto N = j.m_data.m_value.object->size();\n                if (N <= 0x17)\n                {\n                    write_number(static_cast<std::uint8_t>(0xA0 + N));\n                }\n                else if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    oa->write_character(to_char_type(0xB8));\n                    write_number(static_cast<std::uint8_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    oa->write_character(to_char_type(0xB9));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    oa->write_character(to_char_type(0xBA));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n                // LCOV_EXCL_START\n                else if (N <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    oa->write_character(to_char_type(0xBB));\n                    write_number(static_cast<std::uint64_t>(N));\n                }\n                // LCOV_EXCL_STOP\n\n                // step 2: write each element\n                for (const auto& el : *j.m_data.m_value.object)\n                {\n                    write_cbor(el.first);\n                    write_cbor(el.second);\n                }\n                break;\n            }\n\n            case value_t::discarded:\n            default:\n                break;\n        }\n    }\n\n    /*!\n    @param[in] j  JSON value to serialize\n    */\n    void write_msgpack(const BasicJsonType& j)\n    {\n        switch (j.type())\n        {\n            case value_t::null: // nil\n            {\n                oa->write_character(to_char_type(0xC0));\n                break;\n            }\n\n            case value_t::boolean: // true and false\n            {\n                oa->write_character(j.m_data.m_value.boolean\n                                    ? to_char_type(0xC3)\n                                    : to_char_type(0xC2));\n                break;\n            }\n\n            case value_t::number_integer:\n            {\n                if (j.m_data.m_value.number_integer >= 0)\n                {\n                    // MessagePack does not differentiate between positive\n                    // signed integers and unsigned integers. Therefore, we used\n                    // the code from the value_t::number_unsigned case here.\n                    if (j.m_data.m_value.number_unsigned < 128)\n                    {\n                        // positive fixnum\n                        write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())\n                    {\n                        // uint 8\n                        oa->write_character(to_char_type(0xCC));\n                        write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())\n                    {\n                        // uint 16\n                        oa->write_character(to_char_type(0xCD));\n                        write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())\n                    {\n                        // uint 32\n                        oa->write_character(to_char_type(0xCE));\n                        write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())\n                    {\n                        // uint 64\n                        oa->write_character(to_char_type(0xCF));\n                        write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));\n                    }\n                }\n                else\n                {\n                    if (j.m_data.m_value.number_integer >= -32)\n                    {\n                        // negative fixnum\n                        write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() &&\n                             j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())\n                    {\n                        // int 8\n                        oa->write_character(to_char_type(0xD0));\n                        write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() &&\n                             j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())\n                    {\n                        // int 16\n                        oa->write_character(to_char_type(0xD1));\n                        write_number(static_cast<std::int16_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() &&\n                             j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())\n                    {\n                        // int 32\n                        oa->write_character(to_char_type(0xD2));\n                        write_number(static_cast<std::int32_t>(j.m_data.m_value.number_integer));\n                    }\n                    else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() &&\n                             j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())\n                    {\n                        // int 64\n                        oa->write_character(to_char_type(0xD3));\n                        write_number(static_cast<std::int64_t>(j.m_data.m_value.number_integer));\n                    }\n                }\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                if (j.m_data.m_value.number_unsigned < 128)\n                {\n                    // positive fixnum\n                    write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    // uint 8\n                    oa->write_character(to_char_type(0xCC));\n                    write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    // uint 16\n                    oa->write_character(to_char_type(0xCD));\n                    write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    // uint 32\n                    oa->write_character(to_char_type(0xCE));\n                    write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));\n                }\n                else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    // uint 64\n                    oa->write_character(to_char_type(0xCF));\n                    write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));\n                }\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::msgpack);\n                break;\n            }\n\n            case value_t::string:\n            {\n                // step 1: write control byte and the string length\n                const auto N = j.m_data.m_value.string->size();\n                if (N <= 31)\n                {\n                    // fixstr\n                    write_number(static_cast<std::uint8_t>(0xA0 | N));\n                }\n                else if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    // str 8\n                    oa->write_character(to_char_type(0xD9));\n                    write_number(static_cast<std::uint8_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    // str 16\n                    oa->write_character(to_char_type(0xDA));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    // str 32\n                    oa->write_character(to_char_type(0xDB));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n\n                // step 2: write the string\n                oa->write_characters(\n                    reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),\n                    j.m_data.m_value.string->size());\n                break;\n            }\n\n            case value_t::array:\n            {\n                // step 1: write control byte and the array size\n                const auto N = j.m_data.m_value.array->size();\n                if (N <= 15)\n                {\n                    // fixarray\n                    write_number(static_cast<std::uint8_t>(0x90 | N));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    // array 16\n                    oa->write_character(to_char_type(0xDC));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    // array 32\n                    oa->write_character(to_char_type(0xDD));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n\n                // step 2: write each element\n                for (const auto& el : *j.m_data.m_value.array)\n                {\n                    write_msgpack(el);\n                }\n                break;\n            }\n\n            case value_t::binary:\n            {\n                // step 0: determine if the binary type has a set subtype to\n                // determine whether or not to use the ext or fixext types\n                const bool use_ext = j.m_data.m_value.binary->has_subtype();\n\n                // step 1: write control byte and the byte string length\n                const auto N = j.m_data.m_value.binary->size();\n                if (N <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    std::uint8_t output_type{};\n                    bool fixed = true;\n                    if (use_ext)\n                    {\n                        switch (N)\n                        {\n                            case 1:\n                                output_type = 0xD4; // fixext 1\n                                break;\n                            case 2:\n                                output_type = 0xD5; // fixext 2\n                                break;\n                            case 4:\n                                output_type = 0xD6; // fixext 4\n                                break;\n                            case 8:\n                                output_type = 0xD7; // fixext 8\n                                break;\n                            case 16:\n                                output_type = 0xD8; // fixext 16\n                                break;\n                            default:\n                                output_type = 0xC7; // ext 8\n                                fixed = false;\n                                break;\n                        }\n\n                    }\n                    else\n                    {\n                        output_type = 0xC4; // bin 8\n                        fixed = false;\n                    }\n\n                    oa->write_character(to_char_type(output_type));\n                    if (!fixed)\n                    {\n                        write_number(static_cast<std::uint8_t>(N));\n                    }\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    const std::uint8_t output_type = use_ext\n                                                     ? 0xC8 // ext 16\n                                                     : 0xC5; // bin 16\n\n                    oa->write_character(to_char_type(output_type));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    const std::uint8_t output_type = use_ext\n                                                     ? 0xC9 // ext 32\n                                                     : 0xC6; // bin 32\n\n                    oa->write_character(to_char_type(output_type));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n\n                // step 1.5: if this is an ext type, write the subtype\n                if (use_ext)\n                {\n                    write_number(static_cast<std::int8_t>(j.m_data.m_value.binary->subtype()));\n                }\n\n                // step 2: write the byte string\n                oa->write_characters(\n                    reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),\n                    N);\n\n                break;\n            }\n\n            case value_t::object:\n            {\n                // step 1: write control byte and the object size\n                const auto N = j.m_data.m_value.object->size();\n                if (N <= 15)\n                {\n                    // fixmap\n                    write_number(static_cast<std::uint8_t>(0x80 | (N & 0xF)));\n                }\n                else if (N <= (std::numeric_limits<std::uint16_t>::max)())\n                {\n                    // map 16\n                    oa->write_character(to_char_type(0xDE));\n                    write_number(static_cast<std::uint16_t>(N));\n                }\n                else if (N <= (std::numeric_limits<std::uint32_t>::max)())\n                {\n                    // map 32\n                    oa->write_character(to_char_type(0xDF));\n                    write_number(static_cast<std::uint32_t>(N));\n                }\n\n                // step 2: write each element\n                for (const auto& el : *j.m_data.m_value.object)\n                {\n                    write_msgpack(el.first);\n                    write_msgpack(el.second);\n                }\n                break;\n            }\n\n            case value_t::discarded:\n            default:\n                break;\n        }\n    }\n\n    /*!\n    @param[in] j  JSON value to serialize\n    @param[in] use_count   whether to use '#' prefixes (optimized format)\n    @param[in] use_type    whether to use '$' prefixes (optimized format)\n    @param[in] add_prefix  whether prefixes need to be used for this value\n    @param[in] use_bjdata  whether write in BJData format, default is false\n    */\n    void write_ubjson(const BasicJsonType& j, const bool use_count,\n                      const bool use_type, const bool add_prefix = true,\n                      const bool use_bjdata = false)\n    {\n        switch (j.type())\n        {\n            case value_t::null:\n            {\n                if (add_prefix)\n                {\n                    oa->write_character(to_char_type('Z'));\n                }\n                break;\n            }\n\n            case value_t::boolean:\n            {\n                if (add_prefix)\n                {\n                    oa->write_character(j.m_data.m_value.boolean\n                                        ? to_char_type('T')\n                                        : to_char_type('F'));\n                }\n                break;\n            }\n\n            case value_t::number_integer:\n            {\n                write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);\n                break;\n            }\n\n            case value_t::string:\n            {\n                if (add_prefix)\n                {\n                    oa->write_character(to_char_type('S'));\n                }\n                write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);\n                oa->write_characters(\n                    reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),\n                    j.m_data.m_value.string->size());\n                break;\n            }\n\n            case value_t::array:\n            {\n                if (add_prefix)\n                {\n                    oa->write_character(to_char_type('['));\n                }\n\n                bool prefix_required = true;\n                if (use_type && !j.m_data.m_value.array->empty())\n                {\n                    JSON_ASSERT(use_count);\n                    const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);\n                    const bool same_prefix = std::all_of(j.begin() + 1, j.end(),\n                                                         [this, first_prefix, use_bjdata](const BasicJsonType & v)\n                    {\n                        return ubjson_prefix(v, use_bjdata) == first_prefix;\n                    });\n\n                    std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type\n\n                    if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))\n                    {\n                        prefix_required = false;\n                        oa->write_character(to_char_type('$'));\n                        oa->write_character(first_prefix);\n                    }\n                }\n\n                if (use_count)\n                {\n                    oa->write_character(to_char_type('#'));\n                    write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata);\n                }\n\n                for (const auto& el : *j.m_data.m_value.array)\n                {\n                    write_ubjson(el, use_count, use_type, prefix_required, use_bjdata);\n                }\n\n                if (!use_count)\n                {\n                    oa->write_character(to_char_type(']'));\n                }\n\n                break;\n            }\n\n            case value_t::binary:\n            {\n                if (add_prefix)\n                {\n                    oa->write_character(to_char_type('['));\n                }\n\n                if (use_type && !j.m_data.m_value.binary->empty())\n                {\n                    JSON_ASSERT(use_count);\n                    oa->write_character(to_char_type('$'));\n                    oa->write_character('U');\n                }\n\n                if (use_count)\n                {\n                    oa->write_character(to_char_type('#'));\n                    write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);\n                }\n\n                if (use_type)\n                {\n                    oa->write_characters(\n                        reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),\n                        j.m_data.m_value.binary->size());\n                }\n                else\n                {\n                    for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i)\n                    {\n                        oa->write_character(to_char_type('U'));\n                        oa->write_character(j.m_data.m_value.binary->data()[i]);\n                    }\n                }\n\n                if (!use_count)\n                {\n                    oa->write_character(to_char_type(']'));\n                }\n\n                break;\n            }\n\n            case value_t::object:\n            {\n                if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find(\"_ArrayType_\") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find(\"_ArraySize_\") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find(\"_ArrayData_\") != j.m_data.m_value.object->end())\n                {\n                    if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type))  // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)\n                    {\n                        break;\n                    }\n                }\n\n                if (add_prefix)\n                {\n                    oa->write_character(to_char_type('{'));\n                }\n\n                bool prefix_required = true;\n                if (use_type && !j.m_data.m_value.object->empty())\n                {\n                    JSON_ASSERT(use_count);\n                    const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);\n                    const bool same_prefix = std::all_of(j.begin(), j.end(),\n                                                         [this, first_prefix, use_bjdata](const BasicJsonType & v)\n                    {\n                        return ubjson_prefix(v, use_bjdata) == first_prefix;\n                    });\n\n                    std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type\n\n                    if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))\n                    {\n                        prefix_required = false;\n                        oa->write_character(to_char_type('$'));\n                        oa->write_character(first_prefix);\n                    }\n                }\n\n                if (use_count)\n                {\n                    oa->write_character(to_char_type('#'));\n                    write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata);\n                }\n\n                for (const auto& el : *j.m_data.m_value.object)\n                {\n                    write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);\n                    oa->write_characters(\n                        reinterpret_cast<const CharType*>(el.first.c_str()),\n                        el.first.size());\n                    write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata);\n                }\n\n                if (!use_count)\n                {\n                    oa->write_character(to_char_type('}'));\n                }\n\n                break;\n            }\n\n            case value_t::discarded:\n            default:\n                break;\n        }\n    }\n\n  private:\n    //////////\n    // BSON //\n    //////////\n\n    /*!\n    @return The size of a BSON document entry header, including the id marker\n            and the entry name size (and its null-terminator).\n    */\n    static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j)\n    {\n        const auto it = name.find(static_cast<typename string_t::value_type>(0));\n        if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos))\n        {\n            JSON_THROW(out_of_range::create(409, concat(\"BSON key cannot contain code point U+0000 (at byte \", std::to_string(it), \")\"), &j));\n            static_cast<void>(j);\n        }\n\n        return /*id*/ 1ul + name.size() + /*zero-terminator*/1u;\n    }\n\n    /*!\n    @brief Writes the given @a element_type and @a name to the output adapter\n    */\n    void write_bson_entry_header(const string_t& name,\n                                 const std::uint8_t element_type)\n    {\n        oa->write_character(to_char_type(element_type)); // boolean\n        oa->write_characters(\n            reinterpret_cast<const CharType*>(name.c_str()),\n            name.size() + 1u);\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and boolean value @a value\n    */\n    void write_bson_boolean(const string_t& name,\n                            const bool value)\n    {\n        write_bson_entry_header(name, 0x08);\n        oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00));\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and double value @a value\n    */\n    void write_bson_double(const string_t& name,\n                           const double value)\n    {\n        write_bson_entry_header(name, 0x01);\n        write_number<double>(value, true);\n    }\n\n    /*!\n    @return The size of the BSON-encoded string in @a value\n    */\n    static std::size_t calc_bson_string_size(const string_t& value)\n    {\n        return sizeof(std::int32_t) + value.size() + 1ul;\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and string value @a value\n    */\n    void write_bson_string(const string_t& name,\n                           const string_t& value)\n    {\n        write_bson_entry_header(name, 0x02);\n\n        write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true);\n        oa->write_characters(\n            reinterpret_cast<const CharType*>(value.c_str()),\n            value.size() + 1);\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and null value\n    */\n    void write_bson_null(const string_t& name)\n    {\n        write_bson_entry_header(name, 0x0A);\n    }\n\n    /*!\n    @return The size of the BSON-encoded integer @a value\n    */\n    static std::size_t calc_bson_integer_size(const std::int64_t value)\n    {\n        return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()\n               ? sizeof(std::int32_t)\n               : sizeof(std::int64_t);\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and integer @a value\n    */\n    void write_bson_integer(const string_t& name,\n                            const std::int64_t value)\n    {\n        if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)())\n        {\n            write_bson_entry_header(name, 0x10); // int32\n            write_number<std::int32_t>(static_cast<std::int32_t>(value), true);\n        }\n        else\n        {\n            write_bson_entry_header(name, 0x12); // int64\n            write_number<std::int64_t>(static_cast<std::int64_t>(value), true);\n        }\n    }\n\n    /*!\n    @return The size of the BSON-encoded unsigned integer in @a j\n    */\n    static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept\n    {\n        return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))\n               ? sizeof(std::int32_t)\n               : sizeof(std::int64_t);\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and unsigned @a value\n    */\n    void write_bson_unsigned(const string_t& name,\n                             const BasicJsonType& j)\n    {\n        if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))\n        {\n            write_bson_entry_header(name, 0x10 /* int32 */);\n            write_number<std::int32_t>(static_cast<std::int32_t>(j.m_data.m_value.number_unsigned), true);\n        }\n        else if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))\n        {\n            write_bson_entry_header(name, 0x12 /* int64 */);\n            write_number<std::int64_t>(static_cast<std::int64_t>(j.m_data.m_value.number_unsigned), true);\n        }\n        else\n        {\n            JSON_THROW(out_of_range::create(407, concat(\"integer number \", std::to_string(j.m_data.m_value.number_unsigned), \" cannot be represented by BSON as it does not fit int64\"), &j));\n        }\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and object @a value\n    */\n    void write_bson_object_entry(const string_t& name,\n                                 const typename BasicJsonType::object_t& value)\n    {\n        write_bson_entry_header(name, 0x03); // object\n        write_bson_object(value);\n    }\n\n    /*!\n    @return The size of the BSON-encoded array @a value\n    */\n    static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value)\n    {\n        std::size_t array_index = 0ul;\n\n        const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el)\n        {\n            return result + calc_bson_element_size(std::to_string(array_index++), el);\n        });\n\n        return sizeof(std::int32_t) + embedded_document_size + 1ul;\n    }\n\n    /*!\n    @return The size of the BSON-encoded binary array @a value\n    */\n    static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value)\n    {\n        return sizeof(std::int32_t) + value.size() + 1ul;\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and array @a value\n    */\n    void write_bson_array(const string_t& name,\n                          const typename BasicJsonType::array_t& value)\n    {\n        write_bson_entry_header(name, 0x04); // array\n        write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true);\n\n        std::size_t array_index = 0ul;\n\n        for (const auto& el : value)\n        {\n            write_bson_element(std::to_string(array_index++), el);\n        }\n\n        oa->write_character(to_char_type(0x00));\n    }\n\n    /*!\n    @brief Writes a BSON element with key @a name and binary value @a value\n    */\n    void write_bson_binary(const string_t& name,\n                           const binary_t& value)\n    {\n        write_bson_entry_header(name, 0x05);\n\n        write_number<std::int32_t>(static_cast<std::int32_t>(value.size()), true);\n        write_number(value.has_subtype() ? static_cast<std::uint8_t>(value.subtype()) : static_cast<std::uint8_t>(0x00));\n\n        oa->write_characters(reinterpret_cast<const CharType*>(value.data()), value.size());\n    }\n\n    /*!\n    @brief Calculates the size necessary to serialize the JSON value @a j with its @a name\n    @return The calculated size for the BSON document entry for @a j with the given @a name.\n    */\n    static std::size_t calc_bson_element_size(const string_t& name,\n            const BasicJsonType& j)\n    {\n        const auto header_size = calc_bson_entry_header_size(name, j);\n        switch (j.type())\n        {\n            case value_t::object:\n                return header_size + calc_bson_object_size(*j.m_data.m_value.object);\n\n            case value_t::array:\n                return header_size + calc_bson_array_size(*j.m_data.m_value.array);\n\n            case value_t::binary:\n                return header_size + calc_bson_binary_size(*j.m_data.m_value.binary);\n\n            case value_t::boolean:\n                return header_size + 1ul;\n\n            case value_t::number_float:\n                return header_size + 8ul;\n\n            case value_t::number_integer:\n                return header_size + calc_bson_integer_size(j.m_data.m_value.number_integer);\n\n            case value_t::number_unsigned:\n                return header_size + calc_bson_unsigned_size(j.m_data.m_value.number_unsigned);\n\n            case value_t::string:\n                return header_size + calc_bson_string_size(*j.m_data.m_value.string);\n\n            case value_t::null:\n                return header_size + 0ul;\n\n            // LCOV_EXCL_START\n            case value_t::discarded:\n            default:\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)\n                return 0ul;\n                // LCOV_EXCL_STOP\n        }\n    }\n\n    /*!\n    @brief Serializes the JSON value @a j to BSON and associates it with the\n           key @a name.\n    @param name The name to associate with the JSON entity @a j within the\n                current BSON document\n    */\n    void write_bson_element(const string_t& name,\n                            const BasicJsonType& j)\n    {\n        switch (j.type())\n        {\n            case value_t::object:\n                return write_bson_object_entry(name, *j.m_data.m_value.object);\n\n            case value_t::array:\n                return write_bson_array(name, *j.m_data.m_value.array);\n\n            case value_t::binary:\n                return write_bson_binary(name, *j.m_data.m_value.binary);\n\n            case value_t::boolean:\n                return write_bson_boolean(name, j.m_data.m_value.boolean);\n\n            case value_t::number_float:\n                return write_bson_double(name, j.m_data.m_value.number_float);\n\n            case value_t::number_integer:\n                return write_bson_integer(name, j.m_data.m_value.number_integer);\n\n            case value_t::number_unsigned:\n                return write_bson_unsigned(name, j);\n\n            case value_t::string:\n                return write_bson_string(name, *j.m_data.m_value.string);\n\n            case value_t::null:\n                return write_bson_null(name);\n\n            // LCOV_EXCL_START\n            case value_t::discarded:\n            default:\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)\n                return;\n                // LCOV_EXCL_STOP\n        }\n    }\n\n    /*!\n    @brief Calculates the size of the BSON serialization of the given\n           JSON-object @a j.\n    @param[in] value  JSON value to serialize\n    @pre       value.type() == value_t::object\n    */\n    static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)\n    {\n        const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0),\n                                          [](size_t result, const typename BasicJsonType::object_t::value_type & el)\n        {\n            return result += calc_bson_element_size(el.first, el.second);\n        });\n\n        return sizeof(std::int32_t) + document_size + 1ul;\n    }\n\n    /*!\n    @param[in] value  JSON value to serialize\n    @pre       value.type() == value_t::object\n    */\n    void write_bson_object(const typename BasicJsonType::object_t& value)\n    {\n        write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_object_size(value)), true);\n\n        for (const auto& el : value)\n        {\n            write_bson_element(el.first, el.second);\n        }\n\n        oa->write_character(to_char_type(0x00));\n    }\n\n    //////////\n    // CBOR //\n    //////////\n\n    static constexpr CharType get_cbor_float_prefix(float /*unused*/)\n    {\n        return to_char_type(0xFA);  // Single-Precision Float\n    }\n\n    static constexpr CharType get_cbor_float_prefix(double /*unused*/)\n    {\n        return to_char_type(0xFB);  // Double-Precision Float\n    }\n\n    /////////////\n    // MsgPack //\n    /////////////\n\n    static constexpr CharType get_msgpack_float_prefix(float /*unused*/)\n    {\n        return to_char_type(0xCA);  // float 32\n    }\n\n    static constexpr CharType get_msgpack_float_prefix(double /*unused*/)\n    {\n        return to_char_type(0xCB);  // float 64\n    }\n\n    ////////////\n    // UBJSON //\n    ////////////\n\n    // UBJSON: write number (floating point)\n    template<typename NumberType, typename std::enable_if<\n                 std::is_floating_point<NumberType>::value, int>::type = 0>\n    void write_number_with_ubjson_prefix(const NumberType n,\n                                         const bool add_prefix,\n                                         const bool use_bjdata)\n    {\n        if (add_prefix)\n        {\n            oa->write_character(get_ubjson_float_prefix(n));\n        }\n        write_number(n, use_bjdata);\n    }\n\n    // UBJSON: write number (unsigned integer)\n    template<typename NumberType, typename std::enable_if<\n                 std::is_unsigned<NumberType>::value, int>::type = 0>\n    void write_number_with_ubjson_prefix(const NumberType n,\n                                         const bool add_prefix,\n                                         const bool use_bjdata)\n    {\n        if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('i'));  // int8\n            }\n            write_number(static_cast<std::uint8_t>(n), use_bjdata);\n        }\n        else if (n <= (std::numeric_limits<std::uint8_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('U'));  // uint8\n            }\n            write_number(static_cast<std::uint8_t>(n), use_bjdata);\n        }\n        else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('I'));  // int16\n            }\n            write_number(static_cast<std::int16_t>(n), use_bjdata);\n        }\n        else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint16_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('u'));  // uint16 - bjdata only\n            }\n            write_number(static_cast<std::uint16_t>(n), use_bjdata);\n        }\n        else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('l'));  // int32\n            }\n            write_number(static_cast<std::int32_t>(n), use_bjdata);\n        }\n        else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint32_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('m'));  // uint32 - bjdata only\n            }\n            write_number(static_cast<std::uint32_t>(n), use_bjdata);\n        }\n        else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('L'));  // int64\n            }\n            write_number(static_cast<std::int64_t>(n), use_bjdata);\n        }\n        else if (use_bjdata && n <= (std::numeric_limits<uint64_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('M'));  // uint64 - bjdata only\n            }\n            write_number(static_cast<std::uint64_t>(n), use_bjdata);\n        }\n        else\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('H'));  // high-precision number\n            }\n\n            const auto number = BasicJsonType(n).dump();\n            write_number_with_ubjson_prefix(number.size(), true, use_bjdata);\n            for (std::size_t i = 0; i < number.size(); ++i)\n            {\n                oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));\n            }\n        }\n    }\n\n    // UBJSON: write number (signed integer)\n    template < typename NumberType, typename std::enable_if <\n                   std::is_signed<NumberType>::value&&\n                   !std::is_floating_point<NumberType>::value, int >::type = 0 >\n    void write_number_with_ubjson_prefix(const NumberType n,\n                                         const bool add_prefix,\n                                         const bool use_bjdata)\n    {\n        if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('i'));  // int8\n            }\n            write_number(static_cast<std::int8_t>(n), use_bjdata);\n        }\n        else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('U'));  // uint8\n            }\n            write_number(static_cast<std::uint8_t>(n), use_bjdata);\n        }\n        else if ((std::numeric_limits<std::int16_t>::min)() <= n && n <= (std::numeric_limits<std::int16_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('I'));  // int16\n            }\n            write_number(static_cast<std::int16_t>(n), use_bjdata);\n        }\n        else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('u'));  // uint16 - bjdata only\n            }\n            write_number(static_cast<uint16_t>(n), use_bjdata);\n        }\n        else if ((std::numeric_limits<std::int32_t>::min)() <= n && n <= (std::numeric_limits<std::int32_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('l'));  // int32\n            }\n            write_number(static_cast<std::int32_t>(n), use_bjdata);\n        }\n        else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('m'));  // uint32 - bjdata only\n            }\n            write_number(static_cast<uint32_t>(n), use_bjdata);\n        }\n        else if ((std::numeric_limits<std::int64_t>::min)() <= n && n <= (std::numeric_limits<std::int64_t>::max)())\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('L'));  // int64\n            }\n            write_number(static_cast<std::int64_t>(n), use_bjdata);\n        }\n        // LCOV_EXCL_START\n        else\n        {\n            if (add_prefix)\n            {\n                oa->write_character(to_char_type('H'));  // high-precision number\n            }\n\n            const auto number = BasicJsonType(n).dump();\n            write_number_with_ubjson_prefix(number.size(), true, use_bjdata);\n            for (std::size_t i = 0; i < number.size(); ++i)\n            {\n                oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));\n            }\n        }\n        // LCOV_EXCL_STOP\n    }\n\n    /*!\n    @brief determine the type prefix of container values\n    */\n    CharType ubjson_prefix(const BasicJsonType& j, const bool use_bjdata) const noexcept\n    {\n        switch (j.type())\n        {\n            case value_t::null:\n                return 'Z';\n\n            case value_t::boolean:\n                return j.m_data.m_value.boolean ? 'T' : 'F';\n\n            case value_t::number_integer:\n            {\n                if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())\n                {\n                    return 'i';\n                }\n                if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())\n                {\n                    return 'U';\n                }\n                if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())\n                {\n                    return 'I';\n                }\n                if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))\n                {\n                    return 'u';\n                }\n                if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())\n                {\n                    return 'l';\n                }\n                if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))\n                {\n                    return 'm';\n                }\n                if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())\n                {\n                    return 'L';\n                }\n                // anything else is treated as high-precision number\n                return 'H'; // LCOV_EXCL_LINE\n            }\n\n            case value_t::number_unsigned:\n            {\n                if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))\n                {\n                    return 'i';\n                }\n                if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)()))\n                {\n                    return 'U';\n                }\n                if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))\n                {\n                    return 'I';\n                }\n                if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)()))\n                {\n                    return 'u';\n                }\n                if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))\n                {\n                    return 'l';\n                }\n                if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)()))\n                {\n                    return 'm';\n                }\n                if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))\n                {\n                    return 'L';\n                }\n                if (use_bjdata && j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())\n                {\n                    return 'M';\n                }\n                // anything else is treated as high-precision number\n                return 'H'; // LCOV_EXCL_LINE\n            }\n\n            case value_t::number_float:\n                return get_ubjson_float_prefix(j.m_data.m_value.number_float);\n\n            case value_t::string:\n                return 'S';\n\n            case value_t::array: // fallthrough\n            case value_t::binary:\n                return '[';\n\n            case value_t::object:\n                return '{';\n\n            case value_t::discarded:\n            default:  // discarded values\n                return 'N';\n        }\n    }\n\n    static constexpr CharType get_ubjson_float_prefix(float /*unused*/)\n    {\n        return 'd';  // float 32\n    }\n\n    static constexpr CharType get_ubjson_float_prefix(double /*unused*/)\n    {\n        return 'D';  // float 64\n    }\n\n    /*!\n    @return false if the object is successfully converted to a bjdata ndarray, true if the type or size is invalid\n    */\n    bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type)\n    {\n        std::map<string_t, CharType> bjdtype = {{\"uint8\", 'U'},  {\"int8\", 'i'},  {\"uint16\", 'u'}, {\"int16\", 'I'},\n            {\"uint32\", 'm'}, {\"int32\", 'l'}, {\"uint64\", 'M'}, {\"int64\", 'L'}, {\"single\", 'd'}, {\"double\", 'D'}, {\"char\", 'C'}\n        };\n\n        string_t key = \"_ArrayType_\";\n        auto it = bjdtype.find(static_cast<string_t>(value.at(key)));\n        if (it == bjdtype.end())\n        {\n            return true;\n        }\n        CharType dtype = it->second;\n\n        key = \"_ArraySize_\";\n        std::size_t len = (value.at(key).empty() ? 0 : 1);\n        for (const auto& el : value.at(key))\n        {\n            len *= static_cast<std::size_t>(el.m_data.m_value.number_unsigned);\n        }\n\n        key = \"_ArrayData_\";\n        if (value.at(key).size() != len)\n        {\n            return true;\n        }\n\n        oa->write_character('[');\n        oa->write_character('$');\n        oa->write_character(dtype);\n        oa->write_character('#');\n\n        key = \"_ArraySize_\";\n        write_ubjson(value.at(key), use_count, use_type, true,  true);\n\n        key = \"_ArrayData_\";\n        if (dtype == 'U' || dtype == 'C')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::uint8_t>(el.m_data.m_value.number_unsigned), true);\n            }\n        }\n        else if (dtype == 'i')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::int8_t>(el.m_data.m_value.number_integer), true);\n            }\n        }\n        else if (dtype == 'u')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::uint16_t>(el.m_data.m_value.number_unsigned), true);\n            }\n        }\n        else if (dtype == 'I')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::int16_t>(el.m_data.m_value.number_integer), true);\n            }\n        }\n        else if (dtype == 'm')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::uint32_t>(el.m_data.m_value.number_unsigned), true);\n            }\n        }\n        else if (dtype == 'l')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::int32_t>(el.m_data.m_value.number_integer), true);\n            }\n        }\n        else if (dtype == 'M')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned), true);\n            }\n        }\n        else if (dtype == 'L')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<std::int64_t>(el.m_data.m_value.number_integer), true);\n            }\n        }\n        else if (dtype == 'd')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<float>(el.m_data.m_value.number_float), true);\n            }\n        }\n        else if (dtype == 'D')\n        {\n            for (const auto& el : value.at(key))\n            {\n                write_number(static_cast<double>(el.m_data.m_value.number_float), true);\n            }\n        }\n        return false;\n    }\n\n    ///////////////////////\n    // Utility functions //\n    ///////////////////////\n\n    /*\n    @brief write a number to output input\n    @param[in] n number of type @a NumberType\n    @param[in] OutputIsLittleEndian Set to true if output data is\n                                 required to be little endian\n    @tparam NumberType the type of the number\n\n    @note This function needs to respect the system's endianness, because bytes\n          in CBOR, MessagePack, and UBJSON are stored in network order (big\n          endian) and therefore need reordering on little endian systems.\n          On the other hand, BSON and BJData use little endian and should reorder\n          on big endian systems.\n    */\n    template<typename NumberType>\n    void write_number(const NumberType n, const bool OutputIsLittleEndian = false)\n    {\n        // step 1: write number to array of length NumberType\n        std::array<CharType, sizeof(NumberType)> vec{};\n        std::memcpy(vec.data(), &n, sizeof(NumberType));\n\n        // step 2: write array to output (with possible reordering)\n        if (is_little_endian != OutputIsLittleEndian)\n        {\n            // reverse byte order prior to conversion if necessary\n            std::reverse(vec.begin(), vec.end());\n        }\n\n        oa->write_characters(vec.data(), sizeof(NumberType));\n    }\n\n    void write_compact_float(const number_float_t n, detail::input_format_t format)\n    {\n#ifdef __GNUC__\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wfloat-equal\"\n#endif\n        if (static_cast<double>(n) >= static_cast<double>(std::numeric_limits<float>::lowest()) &&\n                static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) &&\n                static_cast<double>(static_cast<float>(n)) == static_cast<double>(n))\n        {\n            oa->write_character(format == detail::input_format_t::cbor\n                                ? get_cbor_float_prefix(static_cast<float>(n))\n                                : get_msgpack_float_prefix(static_cast<float>(n)));\n            write_number(static_cast<float>(n));\n        }\n        else\n        {\n            oa->write_character(format == detail::input_format_t::cbor\n                                ? get_cbor_float_prefix(n)\n                                : get_msgpack_float_prefix(n));\n            write_number(n);\n        }\n#ifdef __GNUC__\n#pragma GCC diagnostic pop\n#endif\n    }\n\n  public:\n    // The following to_char_type functions are implement the conversion\n    // between uint8_t and CharType. In case CharType is not unsigned,\n    // such a conversion is required to allow values greater than 128.\n    // See <https://github.com/nlohmann/json/issues/1286> for a discussion.\n    template < typename C = CharType,\n               enable_if_t < std::is_signed<C>::value && std::is_signed<char>::value > * = nullptr >\n    static constexpr CharType to_char_type(std::uint8_t x) noexcept\n    {\n        return *reinterpret_cast<char*>(&x);\n    }\n\n    template < typename C = CharType,\n               enable_if_t < std::is_signed<C>::value && std::is_unsigned<char>::value > * = nullptr >\n    static CharType to_char_type(std::uint8_t x) noexcept\n    {\n        static_assert(sizeof(std::uint8_t) == sizeof(CharType), \"size of CharType must be equal to std::uint8_t\");\n        static_assert(std::is_trivial<CharType>::value, \"CharType must be trivial\");\n        CharType result;\n        std::memcpy(&result, &x, sizeof(x));\n        return result;\n    }\n\n    template<typename C = CharType,\n             enable_if_t<std::is_unsigned<C>::value>* = nullptr>\n    static constexpr CharType to_char_type(std::uint8_t x) noexcept\n    {\n        return x;\n    }\n\n    template < typename InputCharType, typename C = CharType,\n               enable_if_t <\n                   std::is_signed<C>::value &&\n                   std::is_signed<char>::value &&\n                   std::is_same<char, typename std::remove_cv<InputCharType>::type>::value\n                   > * = nullptr >\n    static constexpr CharType to_char_type(InputCharType x) noexcept\n    {\n        return x;\n    }\n\n  private:\n    /// whether we can assume little endianness\n    const bool is_little_endian = little_endianness();\n\n    /// the output\n    output_adapter_t<CharType> oa = nullptr;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/output/output_adapters.hpp>\n\n// #include <nlohmann/detail/output/serializer.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2008-2009 Björn Hoehrmann <bjoern@hoehrmann.de>\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <algorithm> // reverse, remove, fill, find, none_of\n#include <array> // array\n#include <clocale> // localeconv, lconv\n#include <cmath> // labs, isfinite, isnan, signbit\n#include <cstddef> // size_t, ptrdiff_t\n#include <cstdint> // uint8_t\n#include <cstdio> // snprintf\n#include <limits> // numeric_limits\n#include <string> // string, char_traits\n#include <iomanip> // setfill, setw\n#include <type_traits> // is_same\n#include <utility> // move\n\n// #include <nlohmann/detail/conversions/to_chars.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2009 Florian Loitsch <https://florian.loitsch.com/>\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <array> // array\n#include <cmath>   // signbit, isfinite\n#include <cstdint> // intN_t, uintN_t\n#include <cstring> // memcpy, memmove\n#include <limits> // numeric_limits\n#include <type_traits> // conditional\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n/*!\n@brief implements the Grisu2 algorithm for binary to decimal floating-point\nconversion.\n\nThis implementation is a slightly modified version of the reference\nimplementation which may be obtained from\nhttp://florian.loitsch.com/publications (bench.tar.gz).\n\nThe code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch.\n\nFor a detailed description of the algorithm see:\n\n[1] Loitsch, \"Printing Floating-Point Numbers Quickly and Accurately with\n    Integers\", Proceedings of the ACM SIGPLAN 2010 Conference on Programming\n    Language Design and Implementation, PLDI 2010\n[2] Burger, Dybvig, \"Printing Floating-Point Numbers Quickly and Accurately\",\n    Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language\n    Design and Implementation, PLDI 1996\n*/\nnamespace dtoa_impl\n{\n\ntemplate<typename Target, typename Source>\nTarget reinterpret_bits(const Source source)\n{\n    static_assert(sizeof(Target) == sizeof(Source), \"size mismatch\");\n\n    Target target;\n    std::memcpy(&target, &source, sizeof(Source));\n    return target;\n}\n\nstruct diyfp // f * 2^e\n{\n    static constexpr int kPrecision = 64; // = q\n\n    std::uint64_t f = 0;\n    int e = 0;\n\n    constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {}\n\n    /*!\n    @brief returns x - y\n    @pre x.e == y.e and x.f >= y.f\n    */\n    static diyfp sub(const diyfp& x, const diyfp& y) noexcept\n    {\n        JSON_ASSERT(x.e == y.e);\n        JSON_ASSERT(x.f >= y.f);\n\n        return {x.f - y.f, x.e};\n    }\n\n    /*!\n    @brief returns x * y\n    @note The result is rounded. (Only the upper q bits are returned.)\n    */\n    static diyfp mul(const diyfp& x, const diyfp& y) noexcept\n    {\n        static_assert(kPrecision == 64, \"internal error\");\n\n        // Computes:\n        //  f = round((x.f * y.f) / 2^q)\n        //  e = x.e + y.e + q\n\n        // Emulate the 64-bit * 64-bit multiplication:\n        //\n        // p = u * v\n        //   = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi)\n        //   = (u_lo v_lo         ) + 2^32 ((u_lo v_hi         ) + (u_hi v_lo         )) + 2^64 (u_hi v_hi         )\n        //   = (p0                ) + 2^32 ((p1                ) + (p2                )) + 2^64 (p3                )\n        //   = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3                )\n        //   = (p0_lo             ) + 2^32 (p0_hi + p1_lo + p2_lo                      ) + 2^64 (p1_hi + p2_hi + p3)\n        //   = (p0_lo             ) + 2^32 (Q                                          ) + 2^64 (H                 )\n        //   = (p0_lo             ) + 2^32 (Q_lo + 2^32 Q_hi                           ) + 2^64 (H                 )\n        //\n        // (Since Q might be larger than 2^32 - 1)\n        //\n        //   = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H)\n        //\n        // (Q_hi + H does not overflow a 64-bit int)\n        //\n        //   = p_lo + 2^64 p_hi\n\n        const std::uint64_t u_lo = x.f & 0xFFFFFFFFu;\n        const std::uint64_t u_hi = x.f >> 32u;\n        const std::uint64_t v_lo = y.f & 0xFFFFFFFFu;\n        const std::uint64_t v_hi = y.f >> 32u;\n\n        const std::uint64_t p0 = u_lo * v_lo;\n        const std::uint64_t p1 = u_lo * v_hi;\n        const std::uint64_t p2 = u_hi * v_lo;\n        const std::uint64_t p3 = u_hi * v_hi;\n\n        const std::uint64_t p0_hi = p0 >> 32u;\n        const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu;\n        const std::uint64_t p1_hi = p1 >> 32u;\n        const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu;\n        const std::uint64_t p2_hi = p2 >> 32u;\n\n        std::uint64_t Q = p0_hi + p1_lo + p2_lo;\n\n        // The full product might now be computed as\n        //\n        // p_hi = p3 + p2_hi + p1_hi + (Q >> 32)\n        // p_lo = p0_lo + (Q << 32)\n        //\n        // But in this particular case here, the full p_lo is not required.\n        // Effectively we only need to add the highest bit in p_lo to p_hi (and\n        // Q_hi + 1 does not overflow).\n\n        Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up\n\n        const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u);\n\n        return {h, x.e + y.e + 64};\n    }\n\n    /*!\n    @brief normalize x such that the significand is >= 2^(q-1)\n    @pre x.f != 0\n    */\n    static diyfp normalize(diyfp x) noexcept\n    {\n        JSON_ASSERT(x.f != 0);\n\n        while ((x.f >> 63u) == 0)\n        {\n            x.f <<= 1u;\n            x.e--;\n        }\n\n        return x;\n    }\n\n    /*!\n    @brief normalize x such that the result has the exponent E\n    @pre e >= x.e and the upper e - x.e bits of x.f must be zero.\n    */\n    static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept\n    {\n        const int delta = x.e - target_exponent;\n\n        JSON_ASSERT(delta >= 0);\n        JSON_ASSERT(((x.f << delta) >> delta) == x.f);\n\n        return {x.f << delta, target_exponent};\n    }\n};\n\nstruct boundaries\n{\n    diyfp w;\n    diyfp minus;\n    diyfp plus;\n};\n\n/*!\nCompute the (normalized) diyfp representing the input number 'value' and its\nboundaries.\n\n@pre value must be finite and positive\n*/\ntemplate<typename FloatType>\nboundaries compute_boundaries(FloatType value)\n{\n    JSON_ASSERT(std::isfinite(value));\n    JSON_ASSERT(value > 0);\n\n    // Convert the IEEE representation into a diyfp.\n    //\n    // If v is denormal:\n    //      value = 0.F * 2^(1 - bias) = (          F) * 2^(1 - bias - (p-1))\n    // If v is normalized:\n    //      value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1))\n\n    static_assert(std::numeric_limits<FloatType>::is_iec559,\n                  \"internal error: dtoa_short requires an IEEE-754 floating-point implementation\");\n\n    constexpr int      kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit)\n    constexpr int      kBias      = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1);\n    constexpr int      kMinExp    = 1 - kBias;\n    constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1)\n\n    using bits_type = typename std::conditional<kPrecision == 24, std::uint32_t, std::uint64_t >::type;\n\n    const auto bits = static_cast<std::uint64_t>(reinterpret_bits<bits_type>(value));\n    const std::uint64_t E = bits >> (kPrecision - 1);\n    const std::uint64_t F = bits & (kHiddenBit - 1);\n\n    const bool is_denormal = E == 0;\n    const diyfp v = is_denormal\n                    ? diyfp(F, kMinExp)\n                    : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);\n\n    // Compute the boundaries m- and m+ of the floating-point value\n    // v = f * 2^e.\n    //\n    // Determine v- and v+, the floating-point predecessor and successor if v,\n    // respectively.\n    //\n    //      v- = v - 2^e        if f != 2^(p-1) or e == e_min                (A)\n    //         = v - 2^(e-1)    if f == 2^(p-1) and e > e_min                (B)\n    //\n    //      v+ = v + 2^e\n    //\n    // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_\n    // between m- and m+ round to v, regardless of how the input rounding\n    // algorithm breaks ties.\n    //\n    //      ---+-------------+-------------+-------------+-------------+---  (A)\n    //         v-            m-            v             m+            v+\n    //\n    //      -----------------+------+------+-------------+-------------+---  (B)\n    //                       v-     m-     v             m+            v+\n\n    const bool lower_boundary_is_closer = F == 0 && E > 1;\n    const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1);\n    const diyfp m_minus = lower_boundary_is_closer\n                          ? diyfp(4 * v.f - 1, v.e - 2)  // (B)\n                          : diyfp(2 * v.f - 1, v.e - 1); // (A)\n\n    // Determine the normalized w+ = m+.\n    const diyfp w_plus = diyfp::normalize(m_plus);\n\n    // Determine w- = m- such that e_(w-) = e_(w+).\n    const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e);\n\n    return {diyfp::normalize(v), w_minus, w_plus};\n}\n\n// Given normalized diyfp w, Grisu needs to find a (normalized) cached\n// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies\n// within a certain range [alpha, gamma] (Definition 3.2 from [1])\n//\n//      alpha <= e = e_c + e_w + q <= gamma\n//\n// or\n//\n//      f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q\n//                          <= f_c * f_w * 2^gamma\n//\n// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies\n//\n//      2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma\n//\n// or\n//\n//      2^(q - 2 + alpha) <= c * w < 2^(q + gamma)\n//\n// The choice of (alpha,gamma) determines the size of the table and the form of\n// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well\n// in practice:\n//\n// The idea is to cut the number c * w = f * 2^e into two parts, which can be\n// processed independently: An integral part p1, and a fractional part p2:\n//\n//      f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e\n//              = (f div 2^-e) + (f mod 2^-e) * 2^e\n//              = p1 + p2 * 2^e\n//\n// The conversion of p1 into decimal form requires a series of divisions and\n// modulos by (a power of) 10. These operations are faster for 32-bit than for\n// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be\n// achieved by choosing\n//\n//      -e >= 32   or   e <= -32 := gamma\n//\n// In order to convert the fractional part\n//\n//      p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ...\n//\n// into decimal form, the fraction is repeatedly multiplied by 10 and the digits\n// d[-i] are extracted in order:\n//\n//      (10 * p2) div 2^-e = d[-1]\n//      (10 * p2) mod 2^-e = d[-2] / 10^1 + ...\n//\n// The multiplication by 10 must not overflow. It is sufficient to choose\n//\n//      10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64.\n//\n// Since p2 = f mod 2^-e < 2^-e,\n//\n//      -e <= 60   or   e >= -60 := alpha\n\nconstexpr int kAlpha = -60;\nconstexpr int kGamma = -32;\n\nstruct cached_power // c = f * 2^e ~= 10^k\n{\n    std::uint64_t f;\n    int e;\n    int k;\n};\n\n/*!\nFor a normalized diyfp w = f * 2^e, this function returns a (normalized) cached\npower-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c\nsatisfies (Definition 3.2 from [1])\n\n     alpha <= e_c + e + q <= gamma.\n*/\ninline cached_power get_cached_power_for_binary_exponent(int e)\n{\n    // Now\n    //\n    //      alpha <= e_c + e + q <= gamma                                    (1)\n    //      ==> f_c * 2^alpha <= c * 2^e * 2^q\n    //\n    // and since the c's are normalized, 2^(q-1) <= f_c,\n    //\n    //      ==> 2^(q - 1 + alpha) <= c * 2^(e + q)\n    //      ==> 2^(alpha - e - 1) <= c\n    //\n    // If c were an exact power of ten, i.e. c = 10^k, one may determine k as\n    //\n    //      k = ceil( log_10( 2^(alpha - e - 1) ) )\n    //        = ceil( (alpha - e - 1) * log_10(2) )\n    //\n    // From the paper:\n    // \"In theory the result of the procedure could be wrong since c is rounded,\n    //  and the computation itself is approximated [...]. In practice, however,\n    //  this simple function is sufficient.\"\n    //\n    // For IEEE double precision floating-point numbers converted into\n    // normalized diyfp's w = f * 2^e, with q = 64,\n    //\n    //      e >= -1022      (min IEEE exponent)\n    //           -52        (p - 1)\n    //           -52        (p - 1, possibly normalize denormal IEEE numbers)\n    //           -11        (normalize the diyfp)\n    //         = -1137\n    //\n    // and\n    //\n    //      e <= +1023      (max IEEE exponent)\n    //           -52        (p - 1)\n    //           -11        (normalize the diyfp)\n    //         = 960\n    //\n    // This binary exponent range [-1137,960] results in a decimal exponent\n    // range [-307,324]. One does not need to store a cached power for each\n    // k in this range. For each such k it suffices to find a cached power\n    // such that the exponent of the product lies in [alpha,gamma].\n    // This implies that the difference of the decimal exponents of adjacent\n    // table entries must be less than or equal to\n    //\n    //      floor( (gamma - alpha) * log_10(2) ) = 8.\n    //\n    // (A smaller distance gamma-alpha would require a larger table.)\n\n    // NB:\n    // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34.\n\n    constexpr int kCachedPowersMinDecExp = -300;\n    constexpr int kCachedPowersDecStep = 8;\n\n    static constexpr std::array<cached_power, 79> kCachedPowers =\n    {\n        {\n            { 0xAB70FE17C79AC6CA, -1060, -300 },\n            { 0xFF77B1FCBEBCDC4F, -1034, -292 },\n            { 0xBE5691EF416BD60C, -1007, -284 },\n            { 0x8DD01FAD907FFC3C,  -980, -276 },\n            { 0xD3515C2831559A83,  -954, -268 },\n            { 0x9D71AC8FADA6C9B5,  -927, -260 },\n            { 0xEA9C227723EE8BCB,  -901, -252 },\n            { 0xAECC49914078536D,  -874, -244 },\n            { 0x823C12795DB6CE57,  -847, -236 },\n            { 0xC21094364DFB5637,  -821, -228 },\n            { 0x9096EA6F3848984F,  -794, -220 },\n            { 0xD77485CB25823AC7,  -768, -212 },\n            { 0xA086CFCD97BF97F4,  -741, -204 },\n            { 0xEF340A98172AACE5,  -715, -196 },\n            { 0xB23867FB2A35B28E,  -688, -188 },\n            { 0x84C8D4DFD2C63F3B,  -661, -180 },\n            { 0xC5DD44271AD3CDBA,  -635, -172 },\n            { 0x936B9FCEBB25C996,  -608, -164 },\n            { 0xDBAC6C247D62A584,  -582, -156 },\n            { 0xA3AB66580D5FDAF6,  -555, -148 },\n            { 0xF3E2F893DEC3F126,  -529, -140 },\n            { 0xB5B5ADA8AAFF80B8,  -502, -132 },\n            { 0x87625F056C7C4A8B,  -475, -124 },\n            { 0xC9BCFF6034C13053,  -449, -116 },\n            { 0x964E858C91BA2655,  -422, -108 },\n            { 0xDFF9772470297EBD,  -396, -100 },\n            { 0xA6DFBD9FB8E5B88F,  -369,  -92 },\n            { 0xF8A95FCF88747D94,  -343,  -84 },\n            { 0xB94470938FA89BCF,  -316,  -76 },\n            { 0x8A08F0F8BF0F156B,  -289,  -68 },\n            { 0xCDB02555653131B6,  -263,  -60 },\n            { 0x993FE2C6D07B7FAC,  -236,  -52 },\n            { 0xE45C10C42A2B3B06,  -210,  -44 },\n            { 0xAA242499697392D3,  -183,  -36 },\n            { 0xFD87B5F28300CA0E,  -157,  -28 },\n            { 0xBCE5086492111AEB,  -130,  -20 },\n            { 0x8CBCCC096F5088CC,  -103,  -12 },\n            { 0xD1B71758E219652C,   -77,   -4 },\n            { 0x9C40000000000000,   -50,    4 },\n            { 0xE8D4A51000000000,   -24,   12 },\n            { 0xAD78EBC5AC620000,     3,   20 },\n            { 0x813F3978F8940984,    30,   28 },\n            { 0xC097CE7BC90715B3,    56,   36 },\n            { 0x8F7E32CE7BEA5C70,    83,   44 },\n            { 0xD5D238A4ABE98068,   109,   52 },\n            { 0x9F4F2726179A2245,   136,   60 },\n            { 0xED63A231D4C4FB27,   162,   68 },\n            { 0xB0DE65388CC8ADA8,   189,   76 },\n            { 0x83C7088E1AAB65DB,   216,   84 },\n            { 0xC45D1DF942711D9A,   242,   92 },\n            { 0x924D692CA61BE758,   269,  100 },\n            { 0xDA01EE641A708DEA,   295,  108 },\n            { 0xA26DA3999AEF774A,   322,  116 },\n            { 0xF209787BB47D6B85,   348,  124 },\n            { 0xB454E4A179DD1877,   375,  132 },\n            { 0x865B86925B9BC5C2,   402,  140 },\n            { 0xC83553C5C8965D3D,   428,  148 },\n            { 0x952AB45CFA97A0B3,   455,  156 },\n            { 0xDE469FBD99A05FE3,   481,  164 },\n            { 0xA59BC234DB398C25,   508,  172 },\n            { 0xF6C69A72A3989F5C,   534,  180 },\n            { 0xB7DCBF5354E9BECE,   561,  188 },\n            { 0x88FCF317F22241E2,   588,  196 },\n            { 0xCC20CE9BD35C78A5,   614,  204 },\n            { 0x98165AF37B2153DF,   641,  212 },\n            { 0xE2A0B5DC971F303A,   667,  220 },\n            { 0xA8D9D1535CE3B396,   694,  228 },\n            { 0xFB9B7CD9A4A7443C,   720,  236 },\n            { 0xBB764C4CA7A44410,   747,  244 },\n            { 0x8BAB8EEFB6409C1A,   774,  252 },\n            { 0xD01FEF10A657842C,   800,  260 },\n            { 0x9B10A4E5E9913129,   827,  268 },\n            { 0xE7109BFBA19C0C9D,   853,  276 },\n            { 0xAC2820D9623BF429,   880,  284 },\n            { 0x80444B5E7AA7CF85,   907,  292 },\n            { 0xBF21E44003ACDD2D,   933,  300 },\n            { 0x8E679C2F5E44FF8F,   960,  308 },\n            { 0xD433179D9C8CB841,   986,  316 },\n            { 0x9E19DB92B4E31BA9,  1013,  324 },\n        }\n    };\n\n    // This computation gives exactly the same results for k as\n    //      k = ceil((kAlpha - e - 1) * 0.30102999566398114)\n    // for |e| <= 1500, but doesn't require floating-point operations.\n    // NB: log_10(2) ~= 78913 / 2^18\n    JSON_ASSERT(e >= -1500);\n    JSON_ASSERT(e <=  1500);\n    const int f = kAlpha - e - 1;\n    const int k = (f * 78913) / (1 << 18) + static_cast<int>(f > 0);\n\n    const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep;\n    JSON_ASSERT(index >= 0);\n    JSON_ASSERT(static_cast<std::size_t>(index) < kCachedPowers.size());\n\n    const cached_power cached = kCachedPowers[static_cast<std::size_t>(index)];\n    JSON_ASSERT(kAlpha <= cached.e + e + 64);\n    JSON_ASSERT(kGamma >= cached.e + e + 64);\n\n    return cached;\n}\n\n/*!\nFor n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k.\nFor n == 0, returns 1 and sets pow10 := 1.\n*/\ninline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10)\n{\n    // LCOV_EXCL_START\n    if (n >= 1000000000)\n    {\n        pow10 = 1000000000;\n        return 10;\n    }\n    // LCOV_EXCL_STOP\n    if (n >= 100000000)\n    {\n        pow10 = 100000000;\n        return  9;\n    }\n    if (n >= 10000000)\n    {\n        pow10 = 10000000;\n        return  8;\n    }\n    if (n >= 1000000)\n    {\n        pow10 = 1000000;\n        return  7;\n    }\n    if (n >= 100000)\n    {\n        pow10 = 100000;\n        return  6;\n    }\n    if (n >= 10000)\n    {\n        pow10 = 10000;\n        return  5;\n    }\n    if (n >= 1000)\n    {\n        pow10 = 1000;\n        return  4;\n    }\n    if (n >= 100)\n    {\n        pow10 = 100;\n        return  3;\n    }\n    if (n >= 10)\n    {\n        pow10 = 10;\n        return  2;\n    }\n\n    pow10 = 1;\n    return 1;\n}\n\ninline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta,\n                         std::uint64_t rest, std::uint64_t ten_k)\n{\n    JSON_ASSERT(len >= 1);\n    JSON_ASSERT(dist <= delta);\n    JSON_ASSERT(rest <= delta);\n    JSON_ASSERT(ten_k > 0);\n\n    //               <--------------------------- delta ---->\n    //                                  <---- dist --------->\n    // --------------[------------------+-------------------]--------------\n    //               M-                 w                   M+\n    //\n    //                                  ten_k\n    //                                <------>\n    //                                       <---- rest ---->\n    // --------------[------------------+----+--------------]--------------\n    //                                  w    V\n    //                                       = buf * 10^k\n    //\n    // ten_k represents a unit-in-the-last-place in the decimal representation\n    // stored in buf.\n    // Decrement buf by ten_k while this takes buf closer to w.\n\n    // The tests are written in this order to avoid overflow in unsigned\n    // integer arithmetic.\n\n    while (rest < dist\n            && delta - rest >= ten_k\n            && (rest + ten_k < dist || dist - rest > rest + ten_k - dist))\n    {\n        JSON_ASSERT(buf[len - 1] != '0');\n        buf[len - 1]--;\n        rest += ten_k;\n    }\n}\n\n/*!\nGenerates V = buffer * 10^decimal_exponent, such that M- <= V <= M+.\nM- and M+ must be normalized and share the same exponent -60 <= e <= -32.\n*/\ninline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent,\n                             diyfp M_minus, diyfp w, diyfp M_plus)\n{\n    static_assert(kAlpha >= -60, \"internal error\");\n    static_assert(kGamma <= -32, \"internal error\");\n\n    // Generates the digits (and the exponent) of a decimal floating-point\n    // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's\n    // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma.\n    //\n    //               <--------------------------- delta ---->\n    //                                  <---- dist --------->\n    // --------------[------------------+-------------------]--------------\n    //               M-                 w                   M+\n    //\n    // Grisu2 generates the digits of M+ from left to right and stops as soon as\n    // V is in [M-,M+].\n\n    JSON_ASSERT(M_plus.e >= kAlpha);\n    JSON_ASSERT(M_plus.e <= kGamma);\n\n    std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e)\n    std::uint64_t dist  = diyfp::sub(M_plus, w      ).f; // (significand of (M+ - w ), implicit exponent is e)\n\n    // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0):\n    //\n    //      M+ = f * 2^e\n    //         = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e\n    //         = ((p1        ) * 2^-e + (p2        )) * 2^e\n    //         = p1 + p2 * 2^e\n\n    const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e);\n\n    auto p1 = static_cast<std::uint32_t>(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.)\n    std::uint64_t p2 = M_plus.f & (one.f - 1);                    // p2 = f mod 2^-e\n\n    // 1)\n    //\n    // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0]\n\n    JSON_ASSERT(p1 > 0);\n\n    std::uint32_t pow10{};\n    const int k = find_largest_pow10(p1, pow10);\n\n    //      10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1)\n    //\n    //      p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1))\n    //         = (d[k-1]         ) * 10^(k-1) + (p1 mod 10^(k-1))\n    //\n    //      M+ = p1                                             + p2 * 2^e\n    //         = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1))          + p2 * 2^e\n    //         = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e\n    //         = d[k-1] * 10^(k-1) + (                         rest) * 2^e\n    //\n    // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0)\n    //\n    //      p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0]\n    //\n    // but stop as soon as\n    //\n    //      rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e\n\n    int n = k;\n    while (n > 0)\n    {\n        // Invariants:\n        //      M+ = buffer * 10^n + (p1 + p2 * 2^e)    (buffer = 0 for n = k)\n        //      pow10 = 10^(n-1) <= p1 < 10^n\n        //\n        const std::uint32_t d = p1 / pow10;  // d = p1 div 10^(n-1)\n        const std::uint32_t r = p1 % pow10;  // r = p1 mod 10^(n-1)\n        //\n        //      M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e\n        //         = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e)\n        //\n        JSON_ASSERT(d <= 9);\n        buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d\n        //\n        //      M+ = buffer * 10^(n-1) + (r + p2 * 2^e)\n        //\n        p1 = r;\n        n--;\n        //\n        //      M+ = buffer * 10^n + (p1 + p2 * 2^e)\n        //      pow10 = 10^n\n        //\n\n        // Now check if enough digits have been generated.\n        // Compute\n        //\n        //      p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e\n        //\n        // Note:\n        // Since rest and delta share the same exponent e, it suffices to\n        // compare the significands.\n        const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2;\n        if (rest <= delta)\n        {\n            // V = buffer * 10^n, with M- <= V <= M+.\n\n            decimal_exponent += n;\n\n            // We may now just stop. But instead look if the buffer could be\n            // decremented to bring V closer to w.\n            //\n            // pow10 = 10^n is now 1 ulp in the decimal representation V.\n            // The rounding procedure works with diyfp's with an implicit\n            // exponent of e.\n            //\n            //      10^n = (10^n * 2^-e) * 2^e = ulp * 2^e\n            //\n            const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e;\n            grisu2_round(buffer, length, dist, delta, rest, ten_n);\n\n            return;\n        }\n\n        pow10 /= 10;\n        //\n        //      pow10 = 10^(n-1) <= p1 < 10^n\n        // Invariants restored.\n    }\n\n    // 2)\n    //\n    // The digits of the integral part have been generated:\n    //\n    //      M+ = d[k-1]...d[1]d[0] + p2 * 2^e\n    //         = buffer            + p2 * 2^e\n    //\n    // Now generate the digits of the fractional part p2 * 2^e.\n    //\n    // Note:\n    // No decimal point is generated: the exponent is adjusted instead.\n    //\n    // p2 actually represents the fraction\n    //\n    //      p2 * 2^e\n    //          = p2 / 2^-e\n    //          = d[-1] / 10^1 + d[-2] / 10^2 + ...\n    //\n    // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...)\n    //\n    //      p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m\n    //                      + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...)\n    //\n    // using\n    //\n    //      10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e)\n    //                = (                   d) * 2^-e + (                   r)\n    //\n    // or\n    //      10^m * p2 * 2^e = d + r * 2^e\n    //\n    // i.e.\n    //\n    //      M+ = buffer + p2 * 2^e\n    //         = buffer + 10^-m * (d + r * 2^e)\n    //         = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e\n    //\n    // and stop as soon as 10^-m * r * 2^e <= delta * 2^e\n\n    JSON_ASSERT(p2 > delta);\n\n    int m = 0;\n    for (;;)\n    {\n        // Invariant:\n        //      M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e\n        //         = buffer * 10^-m + 10^-m * (p2                                 ) * 2^e\n        //         = buffer * 10^-m + 10^-m * (1/10 * (10 * p2)                   ) * 2^e\n        //         = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e\n        //\n        JSON_ASSERT(p2 <= (std::numeric_limits<std::uint64_t>::max)() / 10);\n        p2 *= 10;\n        const std::uint64_t d = p2 >> -one.e;     // d = (10 * p2) div 2^-e\n        const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e\n        //\n        //      M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e\n        //         = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e))\n        //         = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e\n        //\n        JSON_ASSERT(d <= 9);\n        buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d\n        //\n        //      M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e\n        //\n        p2 = r;\n        m++;\n        //\n        //      M+ = buffer * 10^-m + 10^-m * p2 * 2^e\n        // Invariant restored.\n\n        // Check if enough digits have been generated.\n        //\n        //      10^-m * p2 * 2^e <= delta * 2^e\n        //              p2 * 2^e <= 10^m * delta * 2^e\n        //                    p2 <= 10^m * delta\n        delta *= 10;\n        dist  *= 10;\n        if (p2 <= delta)\n        {\n            break;\n        }\n    }\n\n    // V = buffer * 10^-m, with M- <= V <= M+.\n\n    decimal_exponent -= m;\n\n    // 1 ulp in the decimal representation is now 10^-m.\n    // Since delta and dist are now scaled by 10^m, we need to do the\n    // same with ulp in order to keep the units in sync.\n    //\n    //      10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e\n    //\n    const std::uint64_t ten_m = one.f;\n    grisu2_round(buffer, length, dist, delta, p2, ten_m);\n\n    // By construction this algorithm generates the shortest possible decimal\n    // number (Loitsch, Theorem 6.2) which rounds back to w.\n    // For an input number of precision p, at least\n    //\n    //      N = 1 + ceil(p * log_10(2))\n    //\n    // decimal digits are sufficient to identify all binary floating-point\n    // numbers (Matula, \"In-and-Out conversions\").\n    // This implies that the algorithm does not produce more than N decimal\n    // digits.\n    //\n    //      N = 17 for p = 53 (IEEE double precision)\n    //      N = 9  for p = 24 (IEEE single precision)\n}\n\n/*!\nv = buf * 10^decimal_exponent\nlen is the length of the buffer (number of decimal digits)\nThe buffer must be large enough, i.e. >= max_digits10.\n*/\nJSON_HEDLEY_NON_NULL(1)\ninline void grisu2(char* buf, int& len, int& decimal_exponent,\n                   diyfp m_minus, diyfp v, diyfp m_plus)\n{\n    JSON_ASSERT(m_plus.e == m_minus.e);\n    JSON_ASSERT(m_plus.e == v.e);\n\n    //  --------(-----------------------+-----------------------)--------    (A)\n    //          m-                      v                       m+\n    //\n    //  --------------------(-----------+-----------------------)--------    (B)\n    //                      m-          v                       m+\n    //\n    // First scale v (and m- and m+) such that the exponent is in the range\n    // [alpha, gamma].\n\n    const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e);\n\n    const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k\n\n    // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma]\n    const diyfp w       = diyfp::mul(v,       c_minus_k);\n    const diyfp w_minus = diyfp::mul(m_minus, c_minus_k);\n    const diyfp w_plus  = diyfp::mul(m_plus,  c_minus_k);\n\n    //  ----(---+---)---------------(---+---)---------------(---+---)----\n    //          w-                      w                       w+\n    //          = c*m-                  = c*v                   = c*m+\n    //\n    // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and\n    // w+ are now off by a small amount.\n    // In fact:\n    //\n    //      w - v * 10^k < 1 ulp\n    //\n    // To account for this inaccuracy, add resp. subtract 1 ulp.\n    //\n    //  --------+---[---------------(---+---)---------------]---+--------\n    //          w-  M-                  w                   M+  w+\n    //\n    // Now any number in [M-, M+] (bounds included) will round to w when input,\n    // regardless of how the input rounding algorithm breaks ties.\n    //\n    // And digit_gen generates the shortest possible such number in [M-, M+].\n    // Note that this does not mean that Grisu2 always generates the shortest\n    // possible number in the interval (m-, m+).\n    const diyfp M_minus(w_minus.f + 1, w_minus.e);\n    const diyfp M_plus (w_plus.f  - 1, w_plus.e );\n\n    decimal_exponent = -cached.k; // = -(-k) = k\n\n    grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus);\n}\n\n/*!\nv = buf * 10^decimal_exponent\nlen is the length of the buffer (number of decimal digits)\nThe buffer must be large enough, i.e. >= max_digits10.\n*/\ntemplate<typename FloatType>\nJSON_HEDLEY_NON_NULL(1)\nvoid grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)\n{\n    static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3,\n                  \"internal error: not enough precision\");\n\n    JSON_ASSERT(std::isfinite(value));\n    JSON_ASSERT(value > 0);\n\n    // If the neighbors (and boundaries) of 'value' are always computed for double-precision\n    // numbers, all float's can be recovered using strtod (and strtof). However, the resulting\n    // decimal representations are not exactly \"short\".\n    //\n    // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars)\n    // says \"value is converted to a string as if by std::sprintf in the default (\"C\") locale\"\n    // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars'\n    // does.\n    // On the other hand, the documentation for 'std::to_chars' requires that \"parsing the\n    // representation using the corresponding std::from_chars function recovers value exactly\". That\n    // indicates that single precision floating-point numbers should be recovered using\n    // 'std::strtof'.\n    //\n    // NB: If the neighbors are computed for single-precision numbers, there is a single float\n    //     (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision\n    //     value is off by 1 ulp.\n#if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if)\n    const boundaries w = compute_boundaries(static_cast<double>(value));\n#else\n    const boundaries w = compute_boundaries(value);\n#endif\n\n    grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus);\n}\n\n/*!\n@brief appends a decimal representation of e to buf\n@return a pointer to the element following the exponent.\n@pre -1000 < e < 1000\n*/\nJSON_HEDLEY_NON_NULL(1)\nJSON_HEDLEY_RETURNS_NON_NULL\ninline char* append_exponent(char* buf, int e)\n{\n    JSON_ASSERT(e > -1000);\n    JSON_ASSERT(e <  1000);\n\n    if (e < 0)\n    {\n        e = -e;\n        *buf++ = '-';\n    }\n    else\n    {\n        *buf++ = '+';\n    }\n\n    auto k = static_cast<std::uint32_t>(e);\n    if (k < 10)\n    {\n        // Always print at least two digits in the exponent.\n        // This is for compatibility with printf(\"%g\").\n        *buf++ = '0';\n        *buf++ = static_cast<char>('0' + k);\n    }\n    else if (k < 100)\n    {\n        *buf++ = static_cast<char>('0' + k / 10);\n        k %= 10;\n        *buf++ = static_cast<char>('0' + k);\n    }\n    else\n    {\n        *buf++ = static_cast<char>('0' + k / 100);\n        k %= 100;\n        *buf++ = static_cast<char>('0' + k / 10);\n        k %= 10;\n        *buf++ = static_cast<char>('0' + k);\n    }\n\n    return buf;\n}\n\n/*!\n@brief prettify v = buf * 10^decimal_exponent\n\nIf v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point\nnotation. Otherwise it will be printed in exponential notation.\n\n@pre min_exp < 0\n@pre max_exp > 0\n*/\nJSON_HEDLEY_NON_NULL(1)\nJSON_HEDLEY_RETURNS_NON_NULL\ninline char* format_buffer(char* buf, int len, int decimal_exponent,\n                           int min_exp, int max_exp)\n{\n    JSON_ASSERT(min_exp < 0);\n    JSON_ASSERT(max_exp > 0);\n\n    const int k = len;\n    const int n = len + decimal_exponent;\n\n    // v = buf * 10^(n-k)\n    // k is the length of the buffer (number of decimal digits)\n    // n is the position of the decimal point relative to the start of the buffer.\n\n    if (k <= n && n <= max_exp)\n    {\n        // digits[000]\n        // len <= max_exp + 2\n\n        std::memset(buf + k, '0', static_cast<size_t>(n) - static_cast<size_t>(k));\n        // Make it look like a floating-point number (#362, #378)\n        buf[n + 0] = '.';\n        buf[n + 1] = '0';\n        return buf + (static_cast<size_t>(n) + 2);\n    }\n\n    if (0 < n && n <= max_exp)\n    {\n        // dig.its\n        // len <= max_digits10 + 1\n\n        JSON_ASSERT(k > n);\n\n        std::memmove(buf + (static_cast<size_t>(n) + 1), buf + n, static_cast<size_t>(k) - static_cast<size_t>(n));\n        buf[n] = '.';\n        return buf + (static_cast<size_t>(k) + 1U);\n    }\n\n    if (min_exp < n && n <= 0)\n    {\n        // 0.[000]digits\n        // len <= 2 + (-min_exp - 1) + max_digits10\n\n        std::memmove(buf + (2 + static_cast<size_t>(-n)), buf, static_cast<size_t>(k));\n        buf[0] = '0';\n        buf[1] = '.';\n        std::memset(buf + 2, '0', static_cast<size_t>(-n));\n        return buf + (2U + static_cast<size_t>(-n) + static_cast<size_t>(k));\n    }\n\n    if (k == 1)\n    {\n        // dE+123\n        // len <= 1 + 5\n\n        buf += 1;\n    }\n    else\n    {\n        // d.igitsE+123\n        // len <= max_digits10 + 1 + 5\n\n        std::memmove(buf + 2, buf + 1, static_cast<size_t>(k) - 1);\n        buf[1] = '.';\n        buf += 1 + static_cast<size_t>(k);\n    }\n\n    *buf++ = 'e';\n    return append_exponent(buf, n - 1);\n}\n\n}  // namespace dtoa_impl\n\n/*!\n@brief generates a decimal representation of the floating-point number value in [first, last).\n\nThe format of the resulting decimal representation is similar to printf's %g\nformat. Returns an iterator pointing past-the-end of the decimal representation.\n\n@note The input number must be finite, i.e. NaN's and Inf's are not supported.\n@note The buffer must be large enough.\n@note The result is NOT null-terminated.\n*/\ntemplate<typename FloatType>\nJSON_HEDLEY_NON_NULL(1, 2)\nJSON_HEDLEY_RETURNS_NON_NULL\nchar* to_chars(char* first, const char* last, FloatType value)\n{\n    static_cast<void>(last); // maybe unused - fix warning\n    JSON_ASSERT(std::isfinite(value));\n\n    // Use signbit(value) instead of (value < 0) since signbit works for -0.\n    if (std::signbit(value))\n    {\n        value = -value;\n        *first++ = '-';\n    }\n\n#ifdef __GNUC__\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wfloat-equal\"\n#endif\n    if (value == 0) // +-0\n    {\n        *first++ = '0';\n        // Make it look like a floating-point number (#362, #378)\n        *first++ = '.';\n        *first++ = '0';\n        return first;\n    }\n#ifdef __GNUC__\n#pragma GCC diagnostic pop\n#endif\n\n    JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10);\n\n    // Compute v = buffer * 10^decimal_exponent.\n    // The decimal digits are stored in the buffer, which needs to be interpreted\n    // as an unsigned decimal integer.\n    // len is the length of the buffer, i.e. the number of decimal digits.\n    int len = 0;\n    int decimal_exponent = 0;\n    dtoa_impl::grisu2(first, len, decimal_exponent, value);\n\n    JSON_ASSERT(len <= std::numeric_limits<FloatType>::max_digits10);\n\n    // Format the buffer like printf(\"%.*g\", prec, value)\n    constexpr int kMinExp = -4;\n    // Use digits10 here to increase compatibility with version 2.\n    constexpr int kMaxExp = std::numeric_limits<FloatType>::digits10;\n\n    JSON_ASSERT(last - first >= kMaxExp + 2);\n    JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits<FloatType>::max_digits10);\n    JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10 + 6);\n\n    return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp);\n}\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/exceptions.hpp>\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/cpp_future.hpp>\n\n// #include <nlohmann/detail/output/binary_writer.hpp>\n\n// #include <nlohmann/detail/output/output_adapters.hpp>\n\n// #include <nlohmann/detail/string_concat.hpp>\n\n// #include <nlohmann/detail/value_t.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\nnamespace detail\n{\n\n///////////////////\n// serialization //\n///////////////////\n\n/// how to treat decoding errors\nenum class error_handler_t\n{\n    strict,  ///< throw a type_error exception in case of invalid UTF-8\n    replace, ///< replace invalid UTF-8 sequences with U+FFFD\n    ignore   ///< ignore invalid UTF-8 sequences\n};\n\ntemplate<typename BasicJsonType>\nclass serializer\n{\n    using string_t = typename BasicJsonType::string_t;\n    using number_float_t = typename BasicJsonType::number_float_t;\n    using number_integer_t = typename BasicJsonType::number_integer_t;\n    using number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n    using binary_char_t = typename BasicJsonType::binary_t::value_type;\n    static constexpr std::uint8_t UTF8_ACCEPT = 0;\n    static constexpr std::uint8_t UTF8_REJECT = 1;\n\n  public:\n    /*!\n    @param[in] s  output stream to serialize to\n    @param[in] ichar  indentation character to use\n    @param[in] error_handler_  how to react on decoding errors\n    */\n    serializer(output_adapter_t<char> s, const char ichar,\n               error_handler_t error_handler_ = error_handler_t::strict)\n        : o(std::move(s))\n        , loc(std::localeconv())\n        , thousands_sep(loc->thousands_sep == nullptr ? '\\0' : std::char_traits<char>::to_char_type(* (loc->thousands_sep)))\n        , decimal_point(loc->decimal_point == nullptr ? '\\0' : std::char_traits<char>::to_char_type(* (loc->decimal_point)))\n        , indent_char(ichar)\n        , indent_string(512, indent_char)\n        , error_handler(error_handler_)\n    {}\n\n    // delete because of pointer members\n    serializer(const serializer&) = delete;\n    serializer& operator=(const serializer&) = delete;\n    serializer(serializer&&) = delete;\n    serializer& operator=(serializer&&) = delete;\n    ~serializer() = default;\n\n    /*!\n    @brief internal implementation of the serialization function\n\n    This function is called by the public member function dump and organizes\n    the serialization internally. The indentation level is propagated as\n    additional parameter. In case of arrays and objects, the function is\n    called recursively.\n\n    - strings and object keys are escaped using `escape_string()`\n    - integer numbers are converted implicitly via `operator<<`\n    - floating-point numbers are converted to a string using `\"%g\"` format\n    - binary values are serialized as objects containing the subtype and the\n      byte array\n\n    @param[in] val               value to serialize\n    @param[in] pretty_print      whether the output shall be pretty-printed\n    @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters\n    in the output are escaped with `\\uXXXX` sequences, and the result consists\n    of ASCII characters only.\n    @param[in] indent_step       the indent level\n    @param[in] current_indent    the current indent level (only used internally)\n    */\n    void dump(const BasicJsonType& val,\n              const bool pretty_print,\n              const bool ensure_ascii,\n              const unsigned int indent_step,\n              const unsigned int current_indent = 0)\n    {\n        switch (val.m_data.m_type)\n        {\n            case value_t::object:\n            {\n                if (val.m_data.m_value.object->empty())\n                {\n                    o->write_characters(\"{}\", 2);\n                    return;\n                }\n\n                if (pretty_print)\n                {\n                    o->write_characters(\"{\\n\", 2);\n\n                    // variable to hold indentation for recursive calls\n                    const auto new_indent = current_indent + indent_step;\n                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))\n                    {\n                        indent_string.resize(indent_string.size() * 2, ' ');\n                    }\n\n                    // first n-1 elements\n                    auto i = val.m_data.m_value.object->cbegin();\n                    for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)\n                    {\n                        o->write_characters(indent_string.c_str(), new_indent);\n                        o->write_character('\\\"');\n                        dump_escaped(i->first, ensure_ascii);\n                        o->write_characters(\"\\\": \", 3);\n                        dump(i->second, true, ensure_ascii, indent_step, new_indent);\n                        o->write_characters(\",\\n\", 2);\n                    }\n\n                    // last element\n                    JSON_ASSERT(i != val.m_data.m_value.object->cend());\n                    JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());\n                    o->write_characters(indent_string.c_str(), new_indent);\n                    o->write_character('\\\"');\n                    dump_escaped(i->first, ensure_ascii);\n                    o->write_characters(\"\\\": \", 3);\n                    dump(i->second, true, ensure_ascii, indent_step, new_indent);\n\n                    o->write_character('\\n');\n                    o->write_characters(indent_string.c_str(), current_indent);\n                    o->write_character('}');\n                }\n                else\n                {\n                    o->write_character('{');\n\n                    // first n-1 elements\n                    auto i = val.m_data.m_value.object->cbegin();\n                    for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)\n                    {\n                        o->write_character('\\\"');\n                        dump_escaped(i->first, ensure_ascii);\n                        o->write_characters(\"\\\":\", 2);\n                        dump(i->second, false, ensure_ascii, indent_step, current_indent);\n                        o->write_character(',');\n                    }\n\n                    // last element\n                    JSON_ASSERT(i != val.m_data.m_value.object->cend());\n                    JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());\n                    o->write_character('\\\"');\n                    dump_escaped(i->first, ensure_ascii);\n                    o->write_characters(\"\\\":\", 2);\n                    dump(i->second, false, ensure_ascii, indent_step, current_indent);\n\n                    o->write_character('}');\n                }\n\n                return;\n            }\n\n            case value_t::array:\n            {\n                if (val.m_data.m_value.array->empty())\n                {\n                    o->write_characters(\"[]\", 2);\n                    return;\n                }\n\n                if (pretty_print)\n                {\n                    o->write_characters(\"[\\n\", 2);\n\n                    // variable to hold indentation for recursive calls\n                    const auto new_indent = current_indent + indent_step;\n                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))\n                    {\n                        indent_string.resize(indent_string.size() * 2, ' ');\n                    }\n\n                    // first n-1 elements\n                    for (auto i = val.m_data.m_value.array->cbegin();\n                            i != val.m_data.m_value.array->cend() - 1; ++i)\n                    {\n                        o->write_characters(indent_string.c_str(), new_indent);\n                        dump(*i, true, ensure_ascii, indent_step, new_indent);\n                        o->write_characters(\",\\n\", 2);\n                    }\n\n                    // last element\n                    JSON_ASSERT(!val.m_data.m_value.array->empty());\n                    o->write_characters(indent_string.c_str(), new_indent);\n                    dump(val.m_data.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);\n\n                    o->write_character('\\n');\n                    o->write_characters(indent_string.c_str(), current_indent);\n                    o->write_character(']');\n                }\n                else\n                {\n                    o->write_character('[');\n\n                    // first n-1 elements\n                    for (auto i = val.m_data.m_value.array->cbegin();\n                            i != val.m_data.m_value.array->cend() - 1; ++i)\n                    {\n                        dump(*i, false, ensure_ascii, indent_step, current_indent);\n                        o->write_character(',');\n                    }\n\n                    // last element\n                    JSON_ASSERT(!val.m_data.m_value.array->empty());\n                    dump(val.m_data.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);\n\n                    o->write_character(']');\n                }\n\n                return;\n            }\n\n            case value_t::string:\n            {\n                o->write_character('\\\"');\n                dump_escaped(*val.m_data.m_value.string, ensure_ascii);\n                o->write_character('\\\"');\n                return;\n            }\n\n            case value_t::binary:\n            {\n                if (pretty_print)\n                {\n                    o->write_characters(\"{\\n\", 2);\n\n                    // variable to hold indentation for recursive calls\n                    const auto new_indent = current_indent + indent_step;\n                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))\n                    {\n                        indent_string.resize(indent_string.size() * 2, ' ');\n                    }\n\n                    o->write_characters(indent_string.c_str(), new_indent);\n\n                    o->write_characters(\"\\\"bytes\\\": [\", 10);\n\n                    if (!val.m_data.m_value.binary->empty())\n                    {\n                        for (auto i = val.m_data.m_value.binary->cbegin();\n                                i != val.m_data.m_value.binary->cend() - 1; ++i)\n                        {\n                            dump_integer(*i);\n                            o->write_characters(\", \", 2);\n                        }\n                        dump_integer(val.m_data.m_value.binary->back());\n                    }\n\n                    o->write_characters(\"],\\n\", 3);\n                    o->write_characters(indent_string.c_str(), new_indent);\n\n                    o->write_characters(\"\\\"subtype\\\": \", 11);\n                    if (val.m_data.m_value.binary->has_subtype())\n                    {\n                        dump_integer(val.m_data.m_value.binary->subtype());\n                    }\n                    else\n                    {\n                        o->write_characters(\"null\", 4);\n                    }\n                    o->write_character('\\n');\n                    o->write_characters(indent_string.c_str(), current_indent);\n                    o->write_character('}');\n                }\n                else\n                {\n                    o->write_characters(\"{\\\"bytes\\\":[\", 10);\n\n                    if (!val.m_data.m_value.binary->empty())\n                    {\n                        for (auto i = val.m_data.m_value.binary->cbegin();\n                                i != val.m_data.m_value.binary->cend() - 1; ++i)\n                        {\n                            dump_integer(*i);\n                            o->write_character(',');\n                        }\n                        dump_integer(val.m_data.m_value.binary->back());\n                    }\n\n                    o->write_characters(\"],\\\"subtype\\\":\", 12);\n                    if (val.m_data.m_value.binary->has_subtype())\n                    {\n                        dump_integer(val.m_data.m_value.binary->subtype());\n                        o->write_character('}');\n                    }\n                    else\n                    {\n                        o->write_characters(\"null}\", 5);\n                    }\n                }\n                return;\n            }\n\n            case value_t::boolean:\n            {\n                if (val.m_data.m_value.boolean)\n                {\n                    o->write_characters(\"true\", 4);\n                }\n                else\n                {\n                    o->write_characters(\"false\", 5);\n                }\n                return;\n            }\n\n            case value_t::number_integer:\n            {\n                dump_integer(val.m_data.m_value.number_integer);\n                return;\n            }\n\n            case value_t::number_unsigned:\n            {\n                dump_integer(val.m_data.m_value.number_unsigned);\n                return;\n            }\n\n            case value_t::number_float:\n            {\n                dump_float(val.m_data.m_value.number_float);\n                return;\n            }\n\n            case value_t::discarded:\n            {\n                o->write_characters(\"<discarded>\", 11);\n                return;\n            }\n\n            case value_t::null:\n            {\n                o->write_characters(\"null\", 4);\n                return;\n            }\n\n            default:            // LCOV_EXCL_LINE\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        }\n    }\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    /*!\n    @brief dump escaped string\n\n    Escape a string by replacing certain special characters by a sequence of an\n    escape character (backslash) and another character and other control\n    characters by a sequence of \"\\u\" followed by a four-digit hex\n    representation. The escaped string is written to output stream @a o.\n\n    @param[in] s  the string to escape\n    @param[in] ensure_ascii  whether to escape non-ASCII characters with\n                             \\uXXXX sequences\n\n    @complexity Linear in the length of string @a s.\n    */\n    void dump_escaped(const string_t& s, const bool ensure_ascii)\n    {\n        std::uint32_t codepoint{};\n        std::uint8_t state = UTF8_ACCEPT;\n        std::size_t bytes = 0;  // number of bytes written to string_buffer\n\n        // number of bytes written at the point of the last valid byte\n        std::size_t bytes_after_last_accept = 0;\n        std::size_t undumped_chars = 0;\n\n        for (std::size_t i = 0; i < s.size(); ++i)\n        {\n            const auto byte = static_cast<std::uint8_t>(s[i]);\n\n            switch (decode(state, codepoint, byte))\n            {\n                case UTF8_ACCEPT:  // decode found a new code point\n                {\n                    switch (codepoint)\n                    {\n                        case 0x08: // backspace\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = 'b';\n                            break;\n                        }\n\n                        case 0x09: // horizontal tab\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = 't';\n                            break;\n                        }\n\n                        case 0x0A: // newline\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = 'n';\n                            break;\n                        }\n\n                        case 0x0C: // formfeed\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = 'f';\n                            break;\n                        }\n\n                        case 0x0D: // carriage return\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = 'r';\n                            break;\n                        }\n\n                        case 0x22: // quotation mark\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = '\\\"';\n                            break;\n                        }\n\n                        case 0x5C: // reverse solidus\n                        {\n                            string_buffer[bytes++] = '\\\\';\n                            string_buffer[bytes++] = '\\\\';\n                            break;\n                        }\n\n                        default:\n                        {\n                            // escape control characters (0x00..0x1F) or, if\n                            // ensure_ascii parameter is used, non-ASCII characters\n                            if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F)))\n                            {\n                                if (codepoint <= 0xFFFF)\n                                {\n                                    // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n                                    static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 7, \"\\\\u%04x\",\n                                                                      static_cast<std::uint16_t>(codepoint)));\n                                    bytes += 6;\n                                }\n                                else\n                                {\n                                    // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n                                    static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, \"\\\\u%04x\\\\u%04x\",\n                                                                      static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)),\n                                                                      static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));\n                                    bytes += 12;\n                                }\n                            }\n                            else\n                            {\n                                // copy byte to buffer (all previous bytes\n                                // been copied have in default case above)\n                                string_buffer[bytes++] = s[i];\n                            }\n                            break;\n                        }\n                    }\n\n                    // write buffer and reset index; there must be 13 bytes\n                    // left, as this is the maximal number of bytes to be\n                    // written (\"\\uxxxx\\uxxxx\\0\") for one code point\n                    if (string_buffer.size() - bytes < 13)\n                    {\n                        o->write_characters(string_buffer.data(), bytes);\n                        bytes = 0;\n                    }\n\n                    // remember the byte position of this accept\n                    bytes_after_last_accept = bytes;\n                    undumped_chars = 0;\n                    break;\n                }\n\n                case UTF8_REJECT:  // decode found invalid UTF-8 byte\n                {\n                    switch (error_handler)\n                    {\n                        case error_handler_t::strict:\n                        {\n                            JSON_THROW(type_error::create(316, concat(\"invalid UTF-8 byte at index \", std::to_string(i), \": 0x\", hex_bytes(byte | 0)), nullptr));\n                        }\n\n                        case error_handler_t::ignore:\n                        case error_handler_t::replace:\n                        {\n                            // in case we saw this character the first time, we\n                            // would like to read it again, because the byte\n                            // may be OK for itself, but just not OK for the\n                            // previous sequence\n                            if (undumped_chars > 0)\n                            {\n                                --i;\n                            }\n\n                            // reset length buffer to the last accepted index;\n                            // thus removing/ignoring the invalid characters\n                            bytes = bytes_after_last_accept;\n\n                            if (error_handler == error_handler_t::replace)\n                            {\n                                // add a replacement character\n                                if (ensure_ascii)\n                                {\n                                    string_buffer[bytes++] = '\\\\';\n                                    string_buffer[bytes++] = 'u';\n                                    string_buffer[bytes++] = 'f';\n                                    string_buffer[bytes++] = 'f';\n                                    string_buffer[bytes++] = 'f';\n                                    string_buffer[bytes++] = 'd';\n                                }\n                                else\n                                {\n                                    string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\\xEF');\n                                    string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\\xBF');\n                                    string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\\xBD');\n                                }\n\n                                // write buffer and reset index; there must be 13 bytes\n                                // left, as this is the maximal number of bytes to be\n                                // written (\"\\uxxxx\\uxxxx\\0\") for one code point\n                                if (string_buffer.size() - bytes < 13)\n                                {\n                                    o->write_characters(string_buffer.data(), bytes);\n                                    bytes = 0;\n                                }\n\n                                bytes_after_last_accept = bytes;\n                            }\n\n                            undumped_chars = 0;\n\n                            // continue processing the string\n                            state = UTF8_ACCEPT;\n                            break;\n                        }\n\n                        default:            // LCOV_EXCL_LINE\n                            JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n                    }\n                    break;\n                }\n\n                default:  // decode found yet incomplete multi-byte code point\n                {\n                    if (!ensure_ascii)\n                    {\n                        // code point will not be escaped - copy byte to buffer\n                        string_buffer[bytes++] = s[i];\n                    }\n                    ++undumped_chars;\n                    break;\n                }\n            }\n        }\n\n        // we finished processing the string\n        if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT))\n        {\n            // write buffer\n            if (bytes > 0)\n            {\n                o->write_characters(string_buffer.data(), bytes);\n            }\n        }\n        else\n        {\n            // we finish reading, but do not accept: string was incomplete\n            switch (error_handler)\n            {\n                case error_handler_t::strict:\n                {\n                    JSON_THROW(type_error::create(316, concat(\"incomplete UTF-8 string; last byte: 0x\", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));\n                }\n\n                case error_handler_t::ignore:\n                {\n                    // write all accepted bytes\n                    o->write_characters(string_buffer.data(), bytes_after_last_accept);\n                    break;\n                }\n\n                case error_handler_t::replace:\n                {\n                    // write all accepted bytes\n                    o->write_characters(string_buffer.data(), bytes_after_last_accept);\n                    // add a replacement character\n                    if (ensure_ascii)\n                    {\n                        o->write_characters(\"\\\\ufffd\", 6);\n                    }\n                    else\n                    {\n                        o->write_characters(\"\\xEF\\xBF\\xBD\", 3);\n                    }\n                    break;\n                }\n\n                default:            // LCOV_EXCL_LINE\n                    JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n            }\n        }\n    }\n\n  private:\n    /*!\n    @brief count digits\n\n    Count the number of decimal (base 10) digits for an input unsigned integer.\n\n    @param[in] x  unsigned integer number to count its digits\n    @return    number of decimal digits\n    */\n    inline unsigned int count_digits(number_unsigned_t x) noexcept\n    {\n        unsigned int n_digits = 1;\n        for (;;)\n        {\n            if (x < 10)\n            {\n                return n_digits;\n            }\n            if (x < 100)\n            {\n                return n_digits + 1;\n            }\n            if (x < 1000)\n            {\n                return n_digits + 2;\n            }\n            if (x < 10000)\n            {\n                return n_digits + 3;\n            }\n            x = x / 10000u;\n            n_digits += 4;\n        }\n    }\n\n    /*!\n     * @brief convert a byte to a uppercase hex representation\n     * @param[in] byte byte to represent\n     * @return representation (\"00\"..\"FF\")\n     */\n    static std::string hex_bytes(std::uint8_t byte)\n    {\n        std::string result = \"FF\";\n        constexpr const char* nibble_to_hex = \"0123456789ABCDEF\";\n        result[0] = nibble_to_hex[byte / 16];\n        result[1] = nibble_to_hex[byte % 16];\n        return result;\n    }\n\n    // templates to avoid warnings about useless casts\n    template <typename NumberType, enable_if_t<std::is_signed<NumberType>::value, int> = 0>\n    bool is_negative_number(NumberType x)\n    {\n        return x < 0;\n    }\n\n    template < typename NumberType, enable_if_t <std::is_unsigned<NumberType>::value, int > = 0 >\n    bool is_negative_number(NumberType /*unused*/)\n    {\n        return false;\n    }\n\n    /*!\n    @brief dump an integer\n\n    Dump a given integer to output stream @a o. Works internally with\n    @a number_buffer.\n\n    @param[in] x  integer number (signed or unsigned) to dump\n    @tparam NumberType either @a number_integer_t or @a number_unsigned_t\n    */\n    template < typename NumberType, detail::enable_if_t <\n                   std::is_integral<NumberType>::value ||\n                   std::is_same<NumberType, number_unsigned_t>::value ||\n                   std::is_same<NumberType, number_integer_t>::value ||\n                   std::is_same<NumberType, binary_char_t>::value,\n                   int > = 0 >\n    void dump_integer(NumberType x)\n    {\n        static constexpr std::array<std::array<char, 2>, 100> digits_to_99\n        {\n            {\n                {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},\n                {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},\n                {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},\n                {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},\n                {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},\n                {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},\n                {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},\n                {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},\n                {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},\n                {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},\n            }\n        };\n\n        // special case for \"0\"\n        if (x == 0)\n        {\n            o->write_character('0');\n            return;\n        }\n\n        // use a pointer to fill the buffer\n        auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n\n        number_unsigned_t abs_value;\n\n        unsigned int n_chars{};\n\n        if (is_negative_number(x))\n        {\n            *buffer_ptr = '-';\n            abs_value = remove_sign(static_cast<number_integer_t>(x));\n\n            // account one more byte for the minus sign\n            n_chars = 1 + count_digits(abs_value);\n        }\n        else\n        {\n            abs_value = static_cast<number_unsigned_t>(x);\n            n_chars = count_digits(abs_value);\n        }\n\n        // spare 1 byte for '\\0'\n        JSON_ASSERT(n_chars < number_buffer.size() - 1);\n\n        // jump to the end to generate the string from backward,\n        // so we later avoid reversing the result\n        buffer_ptr += n_chars;\n\n        // Fast int2ascii implementation inspired by \"Fastware\" talk by Andrei Alexandrescu\n        // See: https://www.youtube.com/watch?v=o4-CwDo2zpg\n        while (abs_value >= 100)\n        {\n            const auto digits_index = static_cast<unsigned>((abs_value % 100));\n            abs_value /= 100;\n            *(--buffer_ptr) = digits_to_99[digits_index][1];\n            *(--buffer_ptr) = digits_to_99[digits_index][0];\n        }\n\n        if (abs_value >= 10)\n        {\n            const auto digits_index = static_cast<unsigned>(abs_value);\n            *(--buffer_ptr) = digits_to_99[digits_index][1];\n            *(--buffer_ptr) = digits_to_99[digits_index][0];\n        }\n        else\n        {\n            *(--buffer_ptr) = static_cast<char>('0' + abs_value);\n        }\n\n        o->write_characters(number_buffer.data(), n_chars);\n    }\n\n    /*!\n    @brief dump a floating-point number\n\n    Dump a given floating-point number to output stream @a o. Works internally\n    with @a number_buffer.\n\n    @param[in] x  floating-point number to dump\n    */\n    void dump_float(number_float_t x)\n    {\n        // NaN / inf\n        if (!std::isfinite(x))\n        {\n            o->write_characters(\"null\", 4);\n            return;\n        }\n\n        // If number_float_t is an IEEE-754 single or double precision number,\n        // use the Grisu2 algorithm to produce short numbers which are\n        // guaranteed to round-trip, using strtof and strtod, resp.\n        //\n        // NB: The test below works if <long double> == <double>.\n        static constexpr bool is_ieee_single_or_double\n            = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||\n              (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);\n\n        dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());\n    }\n\n    void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/)\n    {\n        auto* begin = number_buffer.data();\n        auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x);\n\n        o->write_characters(begin, static_cast<size_t>(end - begin));\n    }\n\n    void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/)\n    {\n        // get number of digits for a float -> text -> float round-trip\n        static constexpr auto d = std::numeric_limits<number_float_t>::max_digits10;\n\n        // the actual conversion\n        // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)\n        std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), \"%.*g\", d, x);\n\n        // negative value indicates an error\n        JSON_ASSERT(len > 0);\n        // check if buffer was large enough\n        JSON_ASSERT(static_cast<std::size_t>(len) < number_buffer.size());\n\n        // erase thousands separator\n        if (thousands_sep != '\\0')\n        {\n            // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081\n            const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep);\n            std::fill(end, number_buffer.end(), '\\0');\n            JSON_ASSERT((end - number_buffer.begin()) <= len);\n            len = (end - number_buffer.begin());\n        }\n\n        // convert decimal point to '.'\n        if (decimal_point != '\\0' && decimal_point != '.')\n        {\n            // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081\n            const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point);\n            if (dec_pos != number_buffer.end())\n            {\n                *dec_pos = '.';\n            }\n        }\n\n        o->write_characters(number_buffer.data(), static_cast<std::size_t>(len));\n\n        // determine if we need to append \".0\"\n        const bool value_is_int_like =\n            std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1,\n                         [](char c)\n        {\n            return c == '.' || c == 'e';\n        });\n\n        if (value_is_int_like)\n        {\n            o->write_characters(\".0\", 2);\n        }\n    }\n\n    /*!\n    @brief check whether a string is UTF-8 encoded\n\n    The function checks each byte of a string whether it is UTF-8 encoded. The\n    result of the check is stored in the @a state parameter. The function must\n    be called initially with state 0 (accept). State 1 means the string must\n    be rejected, because the current byte is not allowed. If the string is\n    completely processed, but the state is non-zero, the string ended\n    prematurely; that is, the last byte indicated more bytes should have\n    followed.\n\n    @param[in,out] state  the state of the decoding\n    @param[in,out] codep  codepoint (valid only if resulting state is UTF8_ACCEPT)\n    @param[in] byte       next byte to decode\n    @return               new state\n\n    @note The function has been edited: a std::array is used.\n\n    @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>\n    @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/\n    */\n    static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept\n    {\n        static const std::array<std::uint8_t, 400> utf8d =\n        {\n            {\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F\n                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F\n                7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF\n                8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF\n                0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF\n                0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF\n                0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0\n                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2\n                1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4\n                1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6\n                1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8\n            }\n        };\n\n        JSON_ASSERT(byte < utf8d.size());\n        const std::uint8_t type = utf8d[byte];\n\n        codep = (state != UTF8_ACCEPT)\n                ? (byte & 0x3fu) | (codep << 6u)\n                : (0xFFu >> type) & (byte);\n\n        const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);\n        JSON_ASSERT(index < utf8d.size());\n        state = utf8d[index];\n        return state;\n    }\n\n    /*\n     * Overload to make the compiler happy while it is instantiating\n     * dump_integer for number_unsigned_t.\n     * Must never be called.\n     */\n    number_unsigned_t remove_sign(number_unsigned_t x)\n    {\n        JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        return x; // LCOV_EXCL_LINE\n    }\n\n    /*\n     * Helper function for dump_integer\n     *\n     * This function takes a negative signed integer and returns its absolute\n     * value as unsigned integer. The plus/minus shuffling is necessary as we can\n     * not directly remove the sign of an arbitrary signed integer as the\n     * absolute values of INT_MIN and INT_MAX are usually not the same. See\n     * #1708 for details.\n     */\n    inline number_unsigned_t remove_sign(number_integer_t x) noexcept\n    {\n        JSON_ASSERT(x < 0 && x < (std::numeric_limits<number_integer_t>::max)()); // NOLINT(misc-redundant-expression)\n        return static_cast<number_unsigned_t>(-(x + 1)) + 1;\n    }\n\n  private:\n    /// the output of the serializer\n    output_adapter_t<char> o = nullptr;\n\n    /// a (hopefully) large enough character buffer\n    std::array<char, 64> number_buffer{{}};\n\n    /// the locale\n    const std::lconv* loc = nullptr;\n    /// the locale's thousand separator character\n    const char thousands_sep = '\\0';\n    /// the locale's decimal point character\n    const char decimal_point = '\\0';\n\n    /// string buffer\n    std::array<char, 512> string_buffer{{}};\n\n    /// the indentation character\n    const char indent_char;\n    /// the indentation string\n    string_t indent_string;\n\n    /// error_handler how to react on decoding errors\n    const error_handler_t error_handler;\n};\n\n}  // namespace detail\nNLOHMANN_JSON_NAMESPACE_END\n\n// #include <nlohmann/detail/value_t.hpp>\n\n// #include <nlohmann/json_fwd.hpp>\n\n// #include <nlohmann/ordered_map.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#include <functional> // equal_to, less\n#include <initializer_list> // initializer_list\n#include <iterator> // input_iterator_tag, iterator_traits\n#include <memory> // allocator\n#include <stdexcept> // for out_of_range\n#include <type_traits> // enable_if, is_convertible\n#include <utility> // pair\n#include <vector> // vector\n\n// #include <nlohmann/detail/macro_scope.hpp>\n\n// #include <nlohmann/detail/meta/type_traits.hpp>\n\n\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/// ordered_map: a minimal map-like container that preserves insertion order\n/// for use within nlohmann::basic_json<ordered_map>\ntemplate <class Key, class T, class IgnoredLess = std::less<Key>,\n          class Allocator = std::allocator<std::pair<const Key, T>>>\n                  struct ordered_map : std::vector<std::pair<const Key, T>, Allocator>\n{\n    using key_type = Key;\n    using mapped_type = T;\n    using Container = std::vector<std::pair<const Key, T>, Allocator>;\n    using iterator = typename Container::iterator;\n    using const_iterator = typename Container::const_iterator;\n    using size_type = typename Container::size_type;\n    using value_type = typename Container::value_type;\n#ifdef JSON_HAS_CPP_14\n    using key_compare = std::equal_to<>;\n#else\n    using key_compare = std::equal_to<Key>;\n#endif\n\n    // Explicit constructors instead of `using Container::Container`\n    // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4)\n    ordered_map() noexcept(noexcept(Container())) : Container{} {}\n    explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container(alloc))) : Container{alloc} {}\n    template <class It>\n    ordered_map(It first, It last, const Allocator& alloc = Allocator())\n        : Container{first, last, alloc} {}\n    ordered_map(std::initializer_list<value_type> init, const Allocator& alloc = Allocator() )\n        : Container{init, alloc} {}\n\n    std::pair<iterator, bool> emplace(const key_type& key, T&& t)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return {it, false};\n            }\n        }\n        Container::emplace_back(key, std::forward<T>(t));\n        return {std::prev(this->end()), true};\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    std::pair<iterator, bool> emplace(KeyType && key, T && t)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return {it, false};\n            }\n        }\n        Container::emplace_back(std::forward<KeyType>(key), std::forward<T>(t));\n        return {std::prev(this->end()), true};\n    }\n\n    T& operator[](const key_type& key)\n    {\n        return emplace(key, T{}).first->second;\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    T & operator[](KeyType && key)\n    {\n        return emplace(std::forward<KeyType>(key), T{}).first->second;\n    }\n\n    const T& operator[](const key_type& key) const\n    {\n        return at(key);\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    const T & operator[](KeyType && key) const\n    {\n        return at(std::forward<KeyType>(key));\n    }\n\n    T& at(const key_type& key)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it->second;\n            }\n        }\n\n        JSON_THROW(std::out_of_range(\"key not found\"));\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it->second;\n            }\n        }\n\n        JSON_THROW(std::out_of_range(\"key not found\"));\n    }\n\n    const T& at(const key_type& key) const\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it->second;\n            }\n        }\n\n        JSON_THROW(std::out_of_range(\"key not found\"));\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it->second;\n            }\n        }\n\n        JSON_THROW(std::out_of_range(\"key not found\"));\n    }\n\n    size_type erase(const key_type& key)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                // Since we cannot move const Keys, re-construct them in place\n                for (auto next = it; ++next != this->end(); ++it)\n                {\n                    it->~value_type(); // Destroy but keep allocation\n                    new (&*it) value_type{std::move(*next)};\n                }\n                Container::pop_back();\n                return 1;\n            }\n        }\n        return 0;\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                // Since we cannot move const Keys, re-construct them in place\n                for (auto next = it; ++next != this->end(); ++it)\n                {\n                    it->~value_type(); // Destroy but keep allocation\n                    new (&*it) value_type{std::move(*next)};\n                }\n                Container::pop_back();\n                return 1;\n            }\n        }\n        return 0;\n    }\n\n    iterator erase(iterator pos)\n    {\n        return erase(pos, std::next(pos));\n    }\n\n    iterator erase(iterator first, iterator last)\n    {\n        if (first == last)\n        {\n            return first;\n        }\n\n        const auto elements_affected = std::distance(first, last);\n        const auto offset = std::distance(Container::begin(), first);\n\n        // This is the start situation. We need to delete elements_affected\n        // elements (3 in this example: e, f, g), and need to return an\n        // iterator past the last deleted element (h in this example).\n        // Note that offset is the distance from the start of the vector\n        // to first. We will need this later.\n\n        // [ a, b, c, d, e, f, g, h, i, j ]\n        //               ^        ^\n        //             first    last\n\n        // Since we cannot move const Keys, we re-construct them in place.\n        // We start at first and re-construct (viz. copy) the elements from\n        // the back of the vector. Example for first iteration:\n\n        //               ,--------.\n        //               v        |   destroy e and re-construct with h\n        // [ a, b, c, d, e, f, g, h, i, j ]\n        //               ^        ^\n        //               it       it + elements_affected\n\n        for (auto it = first; std::next(it, elements_affected) != Container::end(); ++it)\n        {\n            it->~value_type(); // destroy but keep allocation\n            new (&*it) value_type{std::move(*std::next(it, elements_affected))}; // \"move\" next element to it\n        }\n\n        // [ a, b, c, d, h, i, j, h, i, j ]\n        //               ^        ^\n        //             first    last\n\n        // remove the unneeded elements at the end of the vector\n        Container::resize(this->size() - static_cast<size_type>(elements_affected));\n\n        // [ a, b, c, d, h, i, j ]\n        //               ^        ^\n        //             first    last\n\n        // first is now pointing past the last deleted element, but we cannot\n        // use this iterator, because it may have been invalidated by the\n        // resize call. Instead, we can return begin() + offset.\n        return Container::begin() + offset;\n    }\n\n    size_type count(const key_type& key) const\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return 1;\n            }\n        }\n        return 0;\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missing-std-forward)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return 1;\n            }\n        }\n        return 0;\n    }\n\n    iterator find(const key_type& key)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it;\n            }\n        }\n        return Container::end();\n    }\n\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_key_type<key_compare, key_type, KeyType>::value, int> = 0>\n    iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it;\n            }\n        }\n        return Container::end();\n    }\n\n    const_iterator find(const key_type& key) const\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, key))\n            {\n                return it;\n            }\n        }\n        return Container::end();\n    }\n\n    std::pair<iterator, bool> insert( value_type&& value )\n    {\n        return emplace(value.first, std::move(value.second));\n    }\n\n    std::pair<iterator, bool> insert( const value_type& value )\n    {\n        for (auto it = this->begin(); it != this->end(); ++it)\n        {\n            if (m_compare(it->first, value.first))\n            {\n                return {it, false};\n            }\n        }\n        Container::push_back(value);\n        return {--this->end(), true};\n    }\n\n    template<typename InputIt>\n    using require_input_iter = typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category,\n            std::input_iterator_tag>::value>::type;\n\n    template<typename InputIt, typename = require_input_iter<InputIt>>\n    void insert(InputIt first, InputIt last)\n    {\n        for (auto it = first; it != last; ++it)\n        {\n            insert(*it);\n        }\n    }\n\nprivate:\n    JSON_NO_UNIQUE_ADDRESS key_compare m_compare = key_compare();\n};\n\nNLOHMANN_JSON_NAMESPACE_END\n\n\n#if defined(JSON_HAS_CPP_17)\n    #if JSON_HAS_STATIC_RTTI\n        #include <any>\n    #endif\n    #include <string_view>\n#endif\n\n/*!\n@brief namespace for Niels Lohmann\n@see https://github.com/nlohmann\n@since version 1.0.0\n*/\nNLOHMANN_JSON_NAMESPACE_BEGIN\n\n/*!\n@brief a class to store JSON values\n\n@internal\n@invariant The member variables @a m_value and @a m_type have the following\nrelationship:\n- If `m_type == value_t::object`, then `m_value.object != nullptr`.\n- If `m_type == value_t::array`, then `m_value.array != nullptr`.\n- If `m_type == value_t::string`, then `m_value.string != nullptr`.\nThe invariants are checked by member function assert_invariant().\n\n@note ObjectType trick from https://stackoverflow.com/a/9860911\n@endinternal\n\n@since version 1.0.0\n\n@nosubgrouping\n*/\nNLOHMANN_BASIC_JSON_TPL_DECLARATION\nclass basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)\n    : public ::nlohmann::detail::json_base_class<CustomBaseClass>\n{\n  private:\n    template<detail::value_t> friend struct detail::external_constructor;\n\n    template<typename>\n    friend class ::nlohmann::json_pointer;\n    // can be restored when json_pointer backwards compatibility is removed\n    // friend ::nlohmann::json_pointer<StringType>;\n\n    template<typename BasicJsonType, typename InputType>\n    friend class ::nlohmann::detail::parser;\n    friend ::nlohmann::detail::serializer<basic_json>;\n    template<typename BasicJsonType>\n    friend class ::nlohmann::detail::iter_impl;\n    template<typename BasicJsonType, typename CharType>\n    friend class ::nlohmann::detail::binary_writer;\n    template<typename BasicJsonType, typename InputType, typename SAX>\n    friend class ::nlohmann::detail::binary_reader;\n    template<typename BasicJsonType>\n    friend class ::nlohmann::detail::json_sax_dom_parser;\n    template<typename BasicJsonType>\n    friend class ::nlohmann::detail::json_sax_dom_callback_parser;\n    friend class ::nlohmann::detail::exception;\n\n    /// workaround type for MSVC\n    using basic_json_t = NLOHMANN_BASIC_JSON_TPL;\n    using json_base_class_t = ::nlohmann::detail::json_base_class<CustomBaseClass>;\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    // convenience aliases for types residing in namespace detail;\n    using lexer = ::nlohmann::detail::lexer_base<basic_json>;\n\n    template<typename InputAdapterType>\n    static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser(\n        InputAdapterType adapter,\n        detail::parser_callback_t<basic_json>cb = nullptr,\n        const bool allow_exceptions = true,\n        const bool ignore_comments = false\n                                 )\n    {\n        return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter),\n                std::move(cb), allow_exceptions, ignore_comments);\n    }\n\n  private:\n    using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t;\n    template<typename BasicJsonType>\n    using internal_iterator = ::nlohmann::detail::internal_iterator<BasicJsonType>;\n    template<typename BasicJsonType>\n    using iter_impl = ::nlohmann::detail::iter_impl<BasicJsonType>;\n    template<typename Iterator>\n    using iteration_proxy = ::nlohmann::detail::iteration_proxy<Iterator>;\n    template<typename Base> using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator<Base>;\n\n    template<typename CharType>\n    using output_adapter_t = ::nlohmann::detail::output_adapter_t<CharType>;\n\n    template<typename InputType>\n    using binary_reader = ::nlohmann::detail::binary_reader<basic_json, InputType>;\n    template<typename CharType> using binary_writer = ::nlohmann::detail::binary_writer<basic_json, CharType>;\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    using serializer = ::nlohmann::detail::serializer<basic_json>;\n\n  public:\n    using value_t = detail::value_t;\n    /// JSON Pointer, see @ref nlohmann::json_pointer\n    using json_pointer = ::nlohmann::json_pointer<StringType>;\n    template<typename T, typename SFINAE>\n    using json_serializer = JSONSerializer<T, SFINAE>;\n    /// how to treat decoding errors\n    using error_handler_t = detail::error_handler_t;\n    /// how to treat CBOR tags\n    using cbor_tag_handler_t = detail::cbor_tag_handler_t;\n    /// helper type for initializer lists of basic_json values\n    using initializer_list_t = std::initializer_list<detail::json_ref<basic_json>>;\n\n    using input_format_t = detail::input_format_t;\n    /// SAX interface type, see @ref nlohmann::json_sax\n    using json_sax_t = json_sax<basic_json>;\n\n    ////////////////\n    // exceptions //\n    ////////////////\n\n    /// @name exceptions\n    /// Classes to implement user-defined exceptions.\n    /// @{\n\n    using exception = detail::exception;\n    using parse_error = detail::parse_error;\n    using invalid_iterator = detail::invalid_iterator;\n    using type_error = detail::type_error;\n    using out_of_range = detail::out_of_range;\n    using other_error = detail::other_error;\n\n    /// @}\n\n    /////////////////////\n    // container types //\n    /////////////////////\n\n    /// @name container types\n    /// The canonic container types to use @ref basic_json like any other STL\n    /// container.\n    /// @{\n\n    /// the type of elements in a basic_json container\n    using value_type = basic_json;\n\n    /// the type of an element reference\n    using reference = value_type&;\n    /// the type of an element const reference\n    using const_reference = const value_type&;\n\n    /// a type to represent differences between iterators\n    using difference_type = std::ptrdiff_t;\n    /// a type to represent container sizes\n    using size_type = std::size_t;\n\n    /// the allocator type\n    using allocator_type = AllocatorType<basic_json>;\n\n    /// the type of an element pointer\n    using pointer = typename std::allocator_traits<allocator_type>::pointer;\n    /// the type of an element const pointer\n    using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;\n\n    /// an iterator for a basic_json container\n    using iterator = iter_impl<basic_json>;\n    /// a const iterator for a basic_json container\n    using const_iterator = iter_impl<const basic_json>;\n    /// a reverse iterator for a basic_json container\n    using reverse_iterator = json_reverse_iterator<typename basic_json::iterator>;\n    /// a const reverse iterator for a basic_json container\n    using const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator>;\n\n    /// @}\n\n    /// @brief returns the allocator associated with the container\n    /// @sa https://json.nlohmann.me/api/basic_json/get_allocator/\n    static allocator_type get_allocator()\n    {\n        return allocator_type();\n    }\n\n    /// @brief returns version information on the library\n    /// @sa https://json.nlohmann.me/api/basic_json/meta/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json meta()\n    {\n        basic_json result;\n\n        result[\"copyright\"] = \"(C) 2013-2023 Niels Lohmann\";\n        result[\"name\"] = \"JSON for Modern C++\";\n        result[\"url\"] = \"https://github.com/nlohmann/json\";\n        result[\"version\"][\"string\"] =\n            detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.',\n                           std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.',\n                           std::to_string(NLOHMANN_JSON_VERSION_PATCH));\n        result[\"version\"][\"major\"] = NLOHMANN_JSON_VERSION_MAJOR;\n        result[\"version\"][\"minor\"] = NLOHMANN_JSON_VERSION_MINOR;\n        result[\"version\"][\"patch\"] = NLOHMANN_JSON_VERSION_PATCH;\n\n#ifdef _WIN32\n        result[\"platform\"] = \"win32\";\n#elif defined __linux__\n        result[\"platform\"] = \"linux\";\n#elif defined __APPLE__\n        result[\"platform\"] = \"apple\";\n#elif defined __unix__\n        result[\"platform\"] = \"unix\";\n#else\n        result[\"platform\"] = \"unknown\";\n#endif\n\n#if defined(__ICC) || defined(__INTEL_COMPILER)\n        result[\"compiler\"] = {{\"family\", \"icc\"}, {\"version\", __INTEL_COMPILER}};\n#elif defined(__clang__)\n        result[\"compiler\"] = {{\"family\", \"clang\"}, {\"version\", __clang_version__}};\n#elif defined(__GNUC__) || defined(__GNUG__)\n        result[\"compiler\"] = {{\"family\", \"gcc\"}, {\"version\", detail::concat(\n                    std::to_string(__GNUC__), '.',\n                    std::to_string(__GNUC_MINOR__), '.',\n                    std::to_string(__GNUC_PATCHLEVEL__))\n            }\n        };\n#elif defined(__HP_cc) || defined(__HP_aCC)\n        result[\"compiler\"] = \"hp\"\n#elif defined(__IBMCPP__)\n        result[\"compiler\"] = {{\"family\", \"ilecpp\"}, {\"version\", __IBMCPP__}};\n#elif defined(_MSC_VER)\n        result[\"compiler\"] = {{\"family\", \"msvc\"}, {\"version\", _MSC_VER}};\n#elif defined(__PGI)\n        result[\"compiler\"] = {{\"family\", \"pgcpp\"}, {\"version\", __PGI}};\n#elif defined(__SUNPRO_CC)\n        result[\"compiler\"] = {{\"family\", \"sunpro\"}, {\"version\", __SUNPRO_CC}};\n#else\n        result[\"compiler\"] = {{\"family\", \"unknown\"}, {\"version\", \"unknown\"}};\n#endif\n\n#if defined(_MSVC_LANG)\n        result[\"compiler\"][\"c++\"] = std::to_string(_MSVC_LANG);\n#elif defined(__cplusplus)\n        result[\"compiler\"][\"c++\"] = std::to_string(__cplusplus);\n#else\n        result[\"compiler\"][\"c++\"] = \"unknown\";\n#endif\n        return result;\n    }\n\n    ///////////////////////////\n    // JSON value data types //\n    ///////////////////////////\n\n    /// @name JSON value data types\n    /// The data types to store a JSON value. These types are derived from\n    /// the template arguments passed to class @ref basic_json.\n    /// @{\n\n    /// @brief default object key comparator type\n    /// The actual object key comparator type (@ref object_comparator_t) may be\n    /// different.\n    /// @sa https://json.nlohmann.me/api/basic_json/default_object_comparator_t/\n#if defined(JSON_HAS_CPP_14)\n    // use of transparent comparator avoids unnecessary repeated construction of temporaries\n    // in functions involving lookup by key with types other than object_t::key_type (aka. StringType)\n    using default_object_comparator_t = std::less<>;\n#else\n    using default_object_comparator_t = std::less<StringType>;\n#endif\n\n    /// @brief a type for an object\n    /// @sa https://json.nlohmann.me/api/basic_json/object_t/\n    using object_t = ObjectType<StringType,\n          basic_json,\n          default_object_comparator_t,\n          AllocatorType<std::pair<const StringType,\n          basic_json>>>;\n\n    /// @brief a type for an array\n    /// @sa https://json.nlohmann.me/api/basic_json/array_t/\n    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\n    /// @brief a type for a string\n    /// @sa https://json.nlohmann.me/api/basic_json/string_t/\n    using string_t = StringType;\n\n    /// @brief a type for a boolean\n    /// @sa https://json.nlohmann.me/api/basic_json/boolean_t/\n    using boolean_t = BooleanType;\n\n    /// @brief a type for a number (integer)\n    /// @sa https://json.nlohmann.me/api/basic_json/number_integer_t/\n    using number_integer_t = NumberIntegerType;\n\n    /// @brief a type for a number (unsigned)\n    /// @sa https://json.nlohmann.me/api/basic_json/number_unsigned_t/\n    using number_unsigned_t = NumberUnsignedType;\n\n    /// @brief a type for a number (floating-point)\n    /// @sa https://json.nlohmann.me/api/basic_json/number_float_t/\n    using number_float_t = NumberFloatType;\n\n    /// @brief a type for a packed binary type\n    /// @sa https://json.nlohmann.me/api/basic_json/binary_t/\n    using binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n\n    /// @brief object key comparator type\n    /// @sa https://json.nlohmann.me/api/basic_json/object_comparator_t/\n    using object_comparator_t = detail::actual_object_comparator_t<basic_json>;\n\n    /// @}\n\n  private:\n\n    /// helper for exception-safe object creation\n    template<typename T, typename... Args>\n    JSON_HEDLEY_RETURNS_NON_NULL\n    static T* create(Args&& ... args)\n    {\n        AllocatorType<T> alloc;\n        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;\n\n        auto deleter = [&](T * obj)\n        {\n            AllocatorTraits::deallocate(alloc, obj, 1);\n        };\n        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);\n        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);\n        JSON_ASSERT(obj != nullptr);\n        return obj.release();\n    }\n\n    ////////////////////////\n    // JSON value storage //\n    ////////////////////////\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    /*!\n    @brief a JSON value\n\n    The actual storage for a JSON value of the @ref basic_json class. This\n    union combines the different storage types for the JSON value types\n    defined in @ref value_t.\n\n    JSON type | value_t type    | used type\n    --------- | --------------- | ------------------------\n    object    | object          | pointer to @ref object_t\n    array     | array           | pointer to @ref array_t\n    string    | string          | pointer to @ref string_t\n    boolean   | boolean         | @ref boolean_t\n    number    | number_integer  | @ref number_integer_t\n    number    | number_unsigned | @ref number_unsigned_t\n    number    | number_float    | @ref number_float_t\n    binary    | binary          | pointer to @ref binary_t\n    null      | null            | *no value is stored*\n\n    @note Variable-length types (objects, arrays, and strings) are stored as\n    pointers. The size of the union should not exceed 64 bits if the default\n    value types are used.\n\n    @since version 1.0.0\n    */\n    union json_value\n    {\n        /// object (stored with pointer to save storage)\n        object_t* object;\n        /// array (stored with pointer to save storage)\n        array_t* array;\n        /// string (stored with pointer to save storage)\n        string_t* string;\n        /// binary (stored with pointer to save storage)\n        binary_t* binary;\n        /// boolean\n        boolean_t boolean;\n        /// number (integer)\n        number_integer_t number_integer;\n        /// number (unsigned integer)\n        number_unsigned_t number_unsigned;\n        /// number (floating-point)\n        number_float_t number_float;\n\n        /// default constructor (for null values)\n        json_value() = default;\n        /// constructor for booleans\n        json_value(boolean_t v) noexcept : boolean(v) {}\n        /// constructor for numbers (integer)\n        json_value(number_integer_t v) noexcept : number_integer(v) {}\n        /// constructor for numbers (unsigned)\n        json_value(number_unsigned_t v) noexcept : number_unsigned(v) {}\n        /// constructor for numbers (floating-point)\n        json_value(number_float_t v) noexcept : number_float(v) {}\n        /// constructor for empty values of a given type\n        json_value(value_t t)\n        {\n            switch (t)\n            {\n                case value_t::object:\n                {\n                    object = create<object_t>();\n                    break;\n                }\n\n                case value_t::array:\n                {\n                    array = create<array_t>();\n                    break;\n                }\n\n                case value_t::string:\n                {\n                    string = create<string_t>(\"\");\n                    break;\n                }\n\n                case value_t::binary:\n                {\n                    binary = create<binary_t>();\n                    break;\n                }\n\n                case value_t::boolean:\n                {\n                    boolean = static_cast<boolean_t>(false);\n                    break;\n                }\n\n                case value_t::number_integer:\n                {\n                    number_integer = static_cast<number_integer_t>(0);\n                    break;\n                }\n\n                case value_t::number_unsigned:\n                {\n                    number_unsigned = static_cast<number_unsigned_t>(0);\n                    break;\n                }\n\n                case value_t::number_float:\n                {\n                    number_float = static_cast<number_float_t>(0.0);\n                    break;\n                }\n\n                case value_t::null:\n                {\n                    object = nullptr;  // silence warning, see #821\n                    break;\n                }\n\n                case value_t::discarded:\n                default:\n                {\n                    object = nullptr;  // silence warning, see #821\n                    if (JSON_HEDLEY_UNLIKELY(t == value_t::null))\n                    {\n                        JSON_THROW(other_error::create(500, \"961c151d2e87f2686a955a9be24d316f1362bf21 3.11.3\", nullptr)); // LCOV_EXCL_LINE\n                    }\n                    break;\n                }\n            }\n        }\n\n        /// constructor for strings\n        json_value(const string_t& value) : string(create<string_t>(value)) {}\n\n        /// constructor for rvalue strings\n        json_value(string_t&& value) : string(create<string_t>(std::move(value))) {}\n\n        /// constructor for objects\n        json_value(const object_t& value) : object(create<object_t>(value)) {}\n\n        /// constructor for rvalue objects\n        json_value(object_t&& value) : object(create<object_t>(std::move(value))) {}\n\n        /// constructor for arrays\n        json_value(const array_t& value) : array(create<array_t>(value)) {}\n\n        /// constructor for rvalue arrays\n        json_value(array_t&& value) : array(create<array_t>(std::move(value))) {}\n\n        /// constructor for binary arrays\n        json_value(const typename binary_t::container_type& value) : binary(create<binary_t>(value)) {}\n\n        /// constructor for rvalue binary arrays\n        json_value(typename binary_t::container_type&& value) : binary(create<binary_t>(std::move(value))) {}\n\n        /// constructor for binary arrays (internal type)\n        json_value(const binary_t& value) : binary(create<binary_t>(value)) {}\n\n        /// constructor for rvalue binary arrays (internal type)\n        json_value(binary_t&& value) : binary(create<binary_t>(std::move(value))) {}\n\n        void destroy(value_t t)\n        {\n            if (\n                (t == value_t::object && object == nullptr) ||\n                (t == value_t::array && array == nullptr) ||\n                (t == value_t::string && string == nullptr) ||\n                (t == value_t::binary && binary == nullptr)\n            )\n            {\n                //not initialized (e.g. due to exception in the ctor)\n                return;\n            }\n            if (t == value_t::array || t == value_t::object)\n            {\n                // flatten the current json_value to a heap-allocated stack\n                std::vector<basic_json> stack;\n\n                // move the top-level items to stack\n                if (t == value_t::array)\n                {\n                    stack.reserve(array->size());\n                    std::move(array->begin(), array->end(), std::back_inserter(stack));\n                }\n                else\n                {\n                    stack.reserve(object->size());\n                    for (auto&& it : *object)\n                    {\n                        stack.push_back(std::move(it.second));\n                    }\n                }\n\n                while (!stack.empty())\n                {\n                    // move the last item to local variable to be processed\n                    basic_json current_item(std::move(stack.back()));\n                    stack.pop_back();\n\n                    // if current_item is array/object, move\n                    // its children to the stack to be processed later\n                    if (current_item.is_array())\n                    {\n                        std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack));\n\n                        current_item.m_data.m_value.array->clear();\n                    }\n                    else if (current_item.is_object())\n                    {\n                        for (auto&& it : *current_item.m_data.m_value.object)\n                        {\n                            stack.push_back(std::move(it.second));\n                        }\n\n                        current_item.m_data.m_value.object->clear();\n                    }\n\n                    // it's now safe that current_item get destructed\n                    // since it doesn't have any children\n                }\n            }\n\n            switch (t)\n            {\n                case value_t::object:\n                {\n                    AllocatorType<object_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, object);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, object, 1);\n                    break;\n                }\n\n                case value_t::array:\n                {\n                    AllocatorType<array_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, array);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, array, 1);\n                    break;\n                }\n\n                case value_t::string:\n                {\n                    AllocatorType<string_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, string);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1);\n                    break;\n                }\n\n                case value_t::binary:\n                {\n                    AllocatorType<binary_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, binary);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1);\n                    break;\n                }\n\n                case value_t::null:\n                case value_t::boolean:\n                case value_t::number_integer:\n                case value_t::number_unsigned:\n                case value_t::number_float:\n                case value_t::discarded:\n                default:\n                {\n                    break;\n                }\n            }\n        }\n    };\n\n  private:\n    /*!\n    @brief checks the class invariants\n\n    This function asserts the class invariants. It needs to be called at the\n    end of every constructor to make sure that created objects respect the\n    invariant. Furthermore, it has to be called each time the type of a JSON\n    value is changed, because the invariant expresses a relationship between\n    @a m_type and @a m_value.\n\n    Furthermore, the parent relation is checked for arrays and objects: If\n    @a check_parents true and the value is an array or object, then the\n    container's elements must have the current value as parent.\n\n    @param[in] check_parents  whether the parent relation should be checked.\n               The value is true by default and should only be set to false\n               during destruction of objects when the invariant does not\n               need to hold.\n    */\n    void assert_invariant(bool check_parents = true) const noexcept\n    {\n        JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);\n        JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);\n        JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);\n        JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);\n\n#if JSON_DIAGNOSTICS\n        JSON_TRY\n        {\n            // cppcheck-suppress assertWithSideEffect\n            JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j)\n            {\n                return j.m_parent == this;\n            }));\n        }\n        JSON_CATCH(...) {} // LCOV_EXCL_LINE\n#endif\n        static_cast<void>(check_parents);\n    }\n\n    void set_parents()\n    {\n#if JSON_DIAGNOSTICS\n        switch (m_data.m_type)\n        {\n            case value_t::array:\n            {\n                for (auto& element : *m_data.m_value.array)\n                {\n                    element.m_parent = this;\n                }\n                break;\n            }\n\n            case value_t::object:\n            {\n                for (auto& element : *m_data.m_value.object)\n                {\n                    element.second.m_parent = this;\n                }\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                break;\n        }\n#endif\n    }\n\n    iterator set_parents(iterator it, typename iterator::difference_type count_set_parents)\n    {\n#if JSON_DIAGNOSTICS\n        for (typename iterator::difference_type i = 0; i < count_set_parents; ++i)\n        {\n            (it + i)->m_parent = this;\n        }\n#else\n        static_cast<void>(count_set_parents);\n#endif\n        return it;\n    }\n\n    reference set_parent(reference j, std::size_t old_capacity = static_cast<std::size_t>(-1))\n    {\n#if JSON_DIAGNOSTICS\n        if (old_capacity != static_cast<std::size_t>(-1))\n        {\n            // see https://github.com/nlohmann/json/issues/2838\n            JSON_ASSERT(type() == value_t::array);\n            if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))\n            {\n                // capacity has changed: update all parents\n                set_parents();\n                return j;\n            }\n        }\n\n        // ordered_json uses a vector internally, so pointers could have\n        // been invalidated; see https://github.com/nlohmann/json/issues/2962\n#ifdef JSON_HEDLEY_MSVC_VERSION\n#pragma warning(push )\n#pragma warning(disable : 4127) // ignore warning to replace if with if constexpr\n#endif\n        if (detail::is_ordered_map<object_t>::value)\n        {\n            set_parents();\n            return j;\n        }\n#ifdef JSON_HEDLEY_MSVC_VERSION\n#pragma warning( pop )\n#endif\n\n        j.m_parent = this;\n#else\n        static_cast<void>(j);\n        static_cast<void>(old_capacity);\n#endif\n        return j;\n    }\n\n  public:\n    //////////////////////////\n    // JSON parser callback //\n    //////////////////////////\n\n    /// @brief parser event types\n    /// @sa https://json.nlohmann.me/api/basic_json/parse_event_t/\n    using parse_event_t = detail::parse_event_t;\n\n    /// @brief per-element parser callback type\n    /// @sa https://json.nlohmann.me/api/basic_json/parser_callback_t/\n    using parser_callback_t = detail::parser_callback_t<basic_json>;\n\n    //////////////////\n    // constructors //\n    //////////////////\n\n    /// @name constructors and destructors\n    /// Constructors of class @ref basic_json, copy/move constructor, copy\n    /// assignment, static functions creating objects, and the destructor.\n    /// @{\n\n    /// @brief create an empty value with a given type\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(const value_t v)\n        : m_data(v)\n    {\n        assert_invariant();\n    }\n\n    /// @brief create a null object\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-exception-escape)\n        : basic_json(value_t::null)\n    {\n        assert_invariant();\n    }\n\n    /// @brief create a JSON value from compatible types\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    template < typename CompatibleType,\n               typename U = detail::uncvref_t<CompatibleType>,\n               detail::enable_if_t <\n                   !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value, int > = 0 >\n    basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape)\n                JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                           std::forward<CompatibleType>(val))))\n    {\n        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief create a JSON value from an existing one\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    template < typename BasicJsonType,\n               detail::enable_if_t <\n                   detail::is_basic_json<BasicJsonType>::value&& !std::is_same<basic_json, BasicJsonType>::value, int > = 0 >\n    basic_json(const BasicJsonType& val)\n    {\n        using other_boolean_t = typename BasicJsonType::boolean_t;\n        using other_number_float_t = typename BasicJsonType::number_float_t;\n        using other_number_integer_t = typename BasicJsonType::number_integer_t;\n        using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t;\n        using other_string_t = typename BasicJsonType::string_t;\n        using other_object_t = typename BasicJsonType::object_t;\n        using other_array_t = typename BasicJsonType::array_t;\n        using other_binary_t = typename BasicJsonType::binary_t;\n\n        switch (val.type())\n        {\n            case value_t::boolean:\n                JSONSerializer<other_boolean_t>::to_json(*this, val.template get<other_boolean_t>());\n                break;\n            case value_t::number_float:\n                JSONSerializer<other_number_float_t>::to_json(*this, val.template get<other_number_float_t>());\n                break;\n            case value_t::number_integer:\n                JSONSerializer<other_number_integer_t>::to_json(*this, val.template get<other_number_integer_t>());\n                break;\n            case value_t::number_unsigned:\n                JSONSerializer<other_number_unsigned_t>::to_json(*this, val.template get<other_number_unsigned_t>());\n                break;\n            case value_t::string:\n                JSONSerializer<other_string_t>::to_json(*this, val.template get_ref<const other_string_t&>());\n                break;\n            case value_t::object:\n                JSONSerializer<other_object_t>::to_json(*this, val.template get_ref<const other_object_t&>());\n                break;\n            case value_t::array:\n                JSONSerializer<other_array_t>::to_json(*this, val.template get_ref<const other_array_t&>());\n                break;\n            case value_t::binary:\n                JSONSerializer<other_binary_t>::to_json(*this, val.template get_ref<const other_binary_t&>());\n                break;\n            case value_t::null:\n                *this = nullptr;\n                break;\n            case value_t::discarded:\n                m_data.m_type = value_t::discarded;\n                break;\n            default:            // LCOV_EXCL_LINE\n                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n        }\n        JSON_ASSERT(m_data.m_type == val.type());\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief create a container (array or object) from an initializer list\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(initializer_list_t init,\n               bool type_deduction = true,\n               value_t manual_type = value_t::array)\n    {\n        // check if each element is an array with two elements whose first\n        // element is a string\n        bool is_an_object = std::all_of(init.begin(), init.end(),\n                                        [](const detail::json_ref<basic_json>& element_ref)\n        {\n            // The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;\n            // (many string types can be constructed from 0 via its null-pointer guise, so we get a\n            // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)\n            return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast<size_type>(0)].is_string();\n        });\n\n        // adjust type if type deduction is not wanted\n        if (!type_deduction)\n        {\n            // if array is wanted, do not create an object though possible\n            if (manual_type == value_t::array)\n            {\n                is_an_object = false;\n            }\n\n            // if object is wanted but impossible, throw an exception\n            if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object))\n            {\n                JSON_THROW(type_error::create(301, \"cannot create object from initializer list\", nullptr));\n            }\n        }\n\n        if (is_an_object)\n        {\n            // the initializer list is a list of pairs -> create object\n            m_data.m_type = value_t::object;\n            m_data.m_value = value_t::object;\n\n            for (auto& element_ref : init)\n            {\n                auto element = element_ref.moved_or_copied();\n                m_data.m_value.object->emplace(\n                    std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),\n                    std::move((*element.m_data.m_value.array)[1]));\n            }\n        }\n        else\n        {\n            // the initializer list describes an array -> create array\n            m_data.m_type = value_t::array;\n            m_data.m_value.array = create<array_t>(init.begin(), init.end());\n        }\n\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief explicitly create a binary array (without subtype)\n    /// @sa https://json.nlohmann.me/api/basic_json/binary/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json binary(const typename binary_t::container_type& init)\n    {\n        auto res = basic_json();\n        res.m_data.m_type = value_t::binary;\n        res.m_data.m_value = init;\n        return res;\n    }\n\n    /// @brief explicitly create a binary array (with subtype)\n    /// @sa https://json.nlohmann.me/api/basic_json/binary/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype)\n    {\n        auto res = basic_json();\n        res.m_data.m_type = value_t::binary;\n        res.m_data.m_value = binary_t(init, subtype);\n        return res;\n    }\n\n    /// @brief explicitly create a binary array\n    /// @sa https://json.nlohmann.me/api/basic_json/binary/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json binary(typename binary_t::container_type&& init)\n    {\n        auto res = basic_json();\n        res.m_data.m_type = value_t::binary;\n        res.m_data.m_value = std::move(init);\n        return res;\n    }\n\n    /// @brief explicitly create a binary array (with subtype)\n    /// @sa https://json.nlohmann.me/api/basic_json/binary/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype)\n    {\n        auto res = basic_json();\n        res.m_data.m_type = value_t::binary;\n        res.m_data.m_value = binary_t(std::move(init), subtype);\n        return res;\n    }\n\n    /// @brief explicitly create an array from an initializer list\n    /// @sa https://json.nlohmann.me/api/basic_json/array/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json array(initializer_list_t init = {})\n    {\n        return basic_json(init, false, value_t::array);\n    }\n\n    /// @brief explicitly create an object from an initializer list\n    /// @sa https://json.nlohmann.me/api/basic_json/object/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json object(initializer_list_t init = {})\n    {\n        return basic_json(init, false, value_t::object);\n    }\n\n    /// @brief construct an array with count copies of given value\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(size_type cnt, const basic_json& val):\n        m_data{cnt, val}\n    {\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief construct a JSON container given an iterator range\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    template < class InputIT, typename std::enable_if <\n                   std::is_same<InputIT, typename basic_json_t::iterator>::value ||\n                   std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int >::type = 0 >\n    basic_json(InputIT first, InputIT last)\n    {\n        JSON_ASSERT(first.m_object != nullptr);\n        JSON_ASSERT(last.m_object != nullptr);\n\n        // make sure iterator fits the current value\n        if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(201, \"iterators are not compatible\", nullptr));\n        }\n\n        // copy type from first iterator\n        m_data.m_type = first.m_object->m_data.m_type;\n\n        // check if iterator range is complete for primitive values\n        switch (m_data.m_type)\n        {\n            case value_t::boolean:\n            case value_t::number_float:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::string:\n            {\n                if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin()\n                                         || !last.m_it.primitive_iterator.is_end()))\n                {\n                    JSON_THROW(invalid_iterator::create(204, \"iterators out of range\", first.m_object));\n                }\n                break;\n            }\n\n            case value_t::null:\n            case value_t::object:\n            case value_t::array:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n                break;\n        }\n\n        switch (m_data.m_type)\n        {\n            case value_t::number_integer:\n            {\n                m_data.m_value.number_integer = first.m_object->m_data.m_value.number_integer;\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                m_data.m_value.number_unsigned = first.m_object->m_data.m_value.number_unsigned;\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                m_data.m_value.number_float = first.m_object->m_data.m_value.number_float;\n                break;\n            }\n\n            case value_t::boolean:\n            {\n                m_data.m_value.boolean = first.m_object->m_data.m_value.boolean;\n                break;\n            }\n\n            case value_t::string:\n            {\n                m_data.m_value = *first.m_object->m_data.m_value.string;\n                break;\n            }\n\n            case value_t::object:\n            {\n                m_data.m_value.object = create<object_t>(first.m_it.object_iterator,\n                                        last.m_it.object_iterator);\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_data.m_value.array = create<array_t>(first.m_it.array_iterator,\n                                                       last.m_it.array_iterator);\n                break;\n            }\n\n            case value_t::binary:\n            {\n                m_data.m_value = *first.m_object->m_data.m_value.binary;\n                break;\n            }\n\n            case value_t::null:\n            case value_t::discarded:\n            default:\n                JSON_THROW(invalid_iterator::create(206, detail::concat(\"cannot construct with iterators from \", first.m_object->type_name()), first.m_object));\n        }\n\n        set_parents();\n        assert_invariant();\n    }\n\n    ///////////////////////////////////////\n    // other constructors and destructor //\n    ///////////////////////////////////////\n\n    template<typename JsonRef,\n             detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>,\n                                 std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0 >\n    basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}\n\n    /// @brief copy constructor\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(const basic_json& other)\n        : json_base_class_t(other)\n    {\n        m_data.m_type = other.m_data.m_type;\n        // check of passed value is valid\n        other.assert_invariant();\n\n        switch (m_data.m_type)\n        {\n            case value_t::object:\n            {\n                m_data.m_value = *other.m_data.m_value.object;\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_data.m_value = *other.m_data.m_value.array;\n                break;\n            }\n\n            case value_t::string:\n            {\n                m_data.m_value = *other.m_data.m_value.string;\n                break;\n            }\n\n            case value_t::boolean:\n            {\n                m_data.m_value = other.m_data.m_value.boolean;\n                break;\n            }\n\n            case value_t::number_integer:\n            {\n                m_data.m_value = other.m_data.m_value.number_integer;\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                m_data.m_value = other.m_data.m_value.number_unsigned;\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                m_data.m_value = other.m_data.m_value.number_float;\n                break;\n            }\n\n            case value_t::binary:\n            {\n                m_data.m_value = *other.m_data.m_value.binary;\n                break;\n            }\n\n            case value_t::null:\n            case value_t::discarded:\n            default:\n                break;\n        }\n\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief move constructor\n    /// @sa https://json.nlohmann.me/api/basic_json/basic_json/\n    basic_json(basic_json&& other) noexcept\n        : json_base_class_t(std::forward<json_base_class_t>(other)),\n          m_data(std::move(other.m_data))\n    {\n        // check that passed value is valid\n        other.assert_invariant(false);\n\n        // invalidate payload\n        other.m_data.m_type = value_t::null;\n        other.m_data.m_value = {};\n\n        set_parents();\n        assert_invariant();\n    }\n\n    /// @brief copy assignment\n    /// @sa https://json.nlohmann.me/api/basic_json/operator=/\n    basic_json& operator=(basic_json other) noexcept (\n        std::is_nothrow_move_constructible<value_t>::value&&\n        std::is_nothrow_move_assignable<value_t>::value&&\n        std::is_nothrow_move_constructible<json_value>::value&&\n        std::is_nothrow_move_assignable<json_value>::value&&\n        std::is_nothrow_move_assignable<json_base_class_t>::value\n    )\n    {\n        // check that passed value is valid\n        other.assert_invariant();\n\n        using std::swap;\n        swap(m_data.m_type, other.m_data.m_type);\n        swap(m_data.m_value, other.m_data.m_value);\n        json_base_class_t::operator=(std::move(other));\n\n        set_parents();\n        assert_invariant();\n        return *this;\n    }\n\n    /// @brief destructor\n    /// @sa https://json.nlohmann.me/api/basic_json/~basic_json/\n    ~basic_json() noexcept\n    {\n        assert_invariant(false);\n    }\n\n    /// @}\n\n  public:\n    ///////////////////////\n    // object inspection //\n    ///////////////////////\n\n    /// @name object inspection\n    /// Functions to inspect the type of a JSON value.\n    /// @{\n\n    /// @brief serialization\n    /// @sa https://json.nlohmann.me/api/basic_json/dump/\n    string_t dump(const int indent = -1,\n                  const char indent_char = ' ',\n                  const bool ensure_ascii = false,\n                  const error_handler_t error_handler = error_handler_t::strict) const\n    {\n        string_t result;\n        serializer s(detail::output_adapter<char, string_t>(result), indent_char, error_handler);\n\n        if (indent >= 0)\n        {\n            s.dump(*this, true, ensure_ascii, static_cast<unsigned int>(indent));\n        }\n        else\n        {\n            s.dump(*this, false, ensure_ascii, 0);\n        }\n\n        return result;\n    }\n\n    /// @brief return the type of the JSON value (explicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/type/\n    constexpr value_t type() const noexcept\n    {\n        return m_data.m_type;\n    }\n\n    /// @brief return whether type is primitive\n    /// @sa https://json.nlohmann.me/api/basic_json/is_primitive/\n    constexpr bool is_primitive() const noexcept\n    {\n        return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n    }\n\n    /// @brief return whether type is structured\n    /// @sa https://json.nlohmann.me/api/basic_json/is_structured/\n    constexpr bool is_structured() const noexcept\n    {\n        return is_array() || is_object();\n    }\n\n    /// @brief return whether value is null\n    /// @sa https://json.nlohmann.me/api/basic_json/is_null/\n    constexpr bool is_null() const noexcept\n    {\n        return m_data.m_type == value_t::null;\n    }\n\n    /// @brief return whether value is a boolean\n    /// @sa https://json.nlohmann.me/api/basic_json/is_boolean/\n    constexpr bool is_boolean() const noexcept\n    {\n        return m_data.m_type == value_t::boolean;\n    }\n\n    /// @brief return whether value is a number\n    /// @sa https://json.nlohmann.me/api/basic_json/is_number/\n    constexpr bool is_number() const noexcept\n    {\n        return is_number_integer() || is_number_float();\n    }\n\n    /// @brief return whether value is an integer number\n    /// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/\n    constexpr bool is_number_integer() const noexcept\n    {\n        return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;\n    }\n\n    /// @brief return whether value is an unsigned integer number\n    /// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/\n    constexpr bool is_number_unsigned() const noexcept\n    {\n        return m_data.m_type == value_t::number_unsigned;\n    }\n\n    /// @brief return whether value is a floating-point number\n    /// @sa https://json.nlohmann.me/api/basic_json/is_number_float/\n    constexpr bool is_number_float() const noexcept\n    {\n        return m_data.m_type == value_t::number_float;\n    }\n\n    /// @brief return whether value is an object\n    /// @sa https://json.nlohmann.me/api/basic_json/is_object/\n    constexpr bool is_object() const noexcept\n    {\n        return m_data.m_type == value_t::object;\n    }\n\n    /// @brief return whether value is an array\n    /// @sa https://json.nlohmann.me/api/basic_json/is_array/\n    constexpr bool is_array() const noexcept\n    {\n        return m_data.m_type == value_t::array;\n    }\n\n    /// @brief return whether value is a string\n    /// @sa https://json.nlohmann.me/api/basic_json/is_string/\n    constexpr bool is_string() const noexcept\n    {\n        return m_data.m_type == value_t::string;\n    }\n\n    /// @brief return whether value is a binary array\n    /// @sa https://json.nlohmann.me/api/basic_json/is_binary/\n    constexpr bool is_binary() const noexcept\n    {\n        return m_data.m_type == value_t::binary;\n    }\n\n    /// @brief return whether value is discarded\n    /// @sa https://json.nlohmann.me/api/basic_json/is_discarded/\n    constexpr bool is_discarded() const noexcept\n    {\n        return m_data.m_type == value_t::discarded;\n    }\n\n    /// @brief return the type of the JSON value (implicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/\n    constexpr operator value_t() const noexcept\n    {\n        return m_data.m_type;\n    }\n\n    /// @}\n\n  private:\n    //////////////////\n    // value access //\n    //////////////////\n\n    /// get a boolean (explicit)\n    boolean_t get_impl(boolean_t* /*unused*/) const\n    {\n        if (JSON_HEDLEY_LIKELY(is_boolean()))\n        {\n            return m_data.m_value.boolean;\n        }\n\n        JSON_THROW(type_error::create(302, detail::concat(\"type must be boolean, but is \", type_name()), this));\n    }\n\n    /// get a pointer to the value (object)\n    object_t* get_impl_ptr(object_t* /*unused*/) noexcept\n    {\n        return is_object() ? m_data.m_value.object : nullptr;\n    }\n\n    /// get a pointer to the value (object)\n    constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept\n    {\n        return is_object() ? m_data.m_value.object : nullptr;\n    }\n\n    /// get a pointer to the value (array)\n    array_t* get_impl_ptr(array_t* /*unused*/) noexcept\n    {\n        return is_array() ? m_data.m_value.array : nullptr;\n    }\n\n    /// get a pointer to the value (array)\n    constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept\n    {\n        return is_array() ? m_data.m_value.array : nullptr;\n    }\n\n    /// get a pointer to the value (string)\n    string_t* get_impl_ptr(string_t* /*unused*/) noexcept\n    {\n        return is_string() ? m_data.m_value.string : nullptr;\n    }\n\n    /// get a pointer to the value (string)\n    constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept\n    {\n        return is_string() ? m_data.m_value.string : nullptr;\n    }\n\n    /// get a pointer to the value (boolean)\n    boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept\n    {\n        return is_boolean() ? &m_data.m_value.boolean : nullptr;\n    }\n\n    /// get a pointer to the value (boolean)\n    constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept\n    {\n        return is_boolean() ? &m_data.m_value.boolean : nullptr;\n    }\n\n    /// get a pointer to the value (integer number)\n    number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept\n    {\n        return is_number_integer() ? &m_data.m_value.number_integer : nullptr;\n    }\n\n    /// get a pointer to the value (integer number)\n    constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept\n    {\n        return is_number_integer() ? &m_data.m_value.number_integer : nullptr;\n    }\n\n    /// get a pointer to the value (unsigned number)\n    number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept\n    {\n        return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;\n    }\n\n    /// get a pointer to the value (unsigned number)\n    constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept\n    {\n        return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;\n    }\n\n    /// get a pointer to the value (floating-point number)\n    number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept\n    {\n        return is_number_float() ? &m_data.m_value.number_float : nullptr;\n    }\n\n    /// get a pointer to the value (floating-point number)\n    constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept\n    {\n        return is_number_float() ? &m_data.m_value.number_float : nullptr;\n    }\n\n    /// get a pointer to the value (binary)\n    binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept\n    {\n        return is_binary() ? m_data.m_value.binary : nullptr;\n    }\n\n    /// get a pointer to the value (binary)\n    constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept\n    {\n        return is_binary() ? m_data.m_value.binary : nullptr;\n    }\n\n    /*!\n    @brief helper function to implement get_ref()\n\n    This function helps to implement get_ref() without code duplication for\n    const and non-const overloads\n\n    @tparam ThisType will be deduced as `basic_json` or `const basic_json`\n\n    @throw type_error.303 if ReferenceType does not match underlying value\n    type of the current JSON\n    */\n    template<typename ReferenceType, typename ThisType>\n    static ReferenceType get_ref_impl(ThisType& obj)\n    {\n        // delegate the call to get_ptr<>()\n        auto* ptr = obj.template get_ptr<typename std::add_pointer<ReferenceType>::type>();\n\n        if (JSON_HEDLEY_LIKELY(ptr != nullptr))\n        {\n            return *ptr;\n        }\n\n        JSON_THROW(type_error::create(303, detail::concat(\"incompatible ReferenceType for get_ref, actual type is \", obj.type_name()), &obj));\n    }\n\n  public:\n    /// @name value access\n    /// Direct access to the stored value of a JSON value.\n    /// @{\n\n    /// @brief get a pointer value (implicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/\n    template<typename PointerType, typename std::enable_if<\n                 std::is_pointer<PointerType>::value, int>::type = 0>\n    auto get_ptr() noexcept -> decltype(std::declval<basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))\n    {\n        // delegate the call to get_impl_ptr<>()\n        return get_impl_ptr(static_cast<PointerType>(nullptr));\n    }\n\n    /// @brief get a pointer value (implicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/\n    template < typename PointerType, typename std::enable_if <\n                   std::is_pointer<PointerType>::value&&\n                   std::is_const<typename std::remove_pointer<PointerType>::type>::value, int >::type = 0 >\n    constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))\n    {\n        // delegate the call to get_impl_ptr<>() const\n        return get_impl_ptr(static_cast<PointerType>(nullptr));\n    }\n\n  private:\n    /*!\n    @brief get a value (explicit)\n\n    Explicit type conversion between the JSON value and a compatible value\n    which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)\n    and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).\n    The value is converted by calling the @ref json_serializer<ValueType>\n    `from_json()` method.\n\n    The function is equivalent to executing\n    @code {.cpp}\n    ValueType ret;\n    JSONSerializer<ValueType>::from_json(*this, ret);\n    return ret;\n    @endcode\n\n    This overloads is chosen if:\n    - @a ValueType is not @ref basic_json,\n    - @ref json_serializer<ValueType> has a `from_json()` method of the form\n      `void from_json(const basic_json&, ValueType&)`, and\n    - @ref json_serializer<ValueType> does not have a `from_json()` method of\n      the form `ValueType from_json(const basic_json&)`\n\n    @tparam ValueType the returned value type\n\n    @return copy of the JSON value, converted to @a ValueType\n\n    @throw what @ref json_serializer<ValueType> `from_json()` method throws\n\n    @liveexample{The example below shows several conversions from JSON values\n    to other types. There a few things to note: (1) Floating-point numbers can\n    be converted to integers\\, (2) A JSON array can be converted to a standard\n    `std::vector<short>`\\, (3) A JSON object can be converted to C++\n    associative containers such as `std::unordered_map<std::string\\,\n    json>`.,get__ValueType_const}\n\n    @since version 2.1.0\n    */\n    template < typename ValueType,\n               detail::enable_if_t <\n                   detail::is_default_constructible<ValueType>::value&&\n                   detail::has_from_json<basic_json_t, ValueType>::value,\n                   int > = 0 >\n    ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(\n                JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))\n    {\n        auto ret = ValueType();\n        JSONSerializer<ValueType>::from_json(*this, ret);\n        return ret;\n    }\n\n    /*!\n    @brief get a value (explicit); special case\n\n    Explicit type conversion between the JSON value and a compatible value\n    which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)\n    and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).\n    The value is converted by calling the @ref json_serializer<ValueType>\n    `from_json()` method.\n\n    The function is equivalent to executing\n    @code {.cpp}\n    return JSONSerializer<ValueType>::from_json(*this);\n    @endcode\n\n    This overloads is chosen if:\n    - @a ValueType is not @ref basic_json and\n    - @ref json_serializer<ValueType> has a `from_json()` method of the form\n      `ValueType from_json(const basic_json&)`\n\n    @note If @ref json_serializer<ValueType> has both overloads of\n    `from_json()`, this one is chosen.\n\n    @tparam ValueType the returned value type\n\n    @return copy of the JSON value, converted to @a ValueType\n\n    @throw what @ref json_serializer<ValueType> `from_json()` method throws\n\n    @since version 2.1.0\n    */\n    template < typename ValueType,\n               detail::enable_if_t <\n                   detail::has_non_default_from_json<basic_json_t, ValueType>::value,\n                   int > = 0 >\n    ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(\n                JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))\n    {\n        return JSONSerializer<ValueType>::from_json(*this);\n    }\n\n    /*!\n    @brief get special-case overload\n\n    This overloads converts the current @ref basic_json in a different\n    @ref basic_json type\n\n    @tparam BasicJsonType == @ref basic_json\n\n    @return a copy of *this, converted into @a BasicJsonType\n\n    @complexity Depending on the implementation of the called `from_json()`\n                method.\n\n    @since version 3.2.0\n    */\n    template < typename BasicJsonType,\n               detail::enable_if_t <\n                   detail::is_basic_json<BasicJsonType>::value,\n                   int > = 0 >\n    BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const\n    {\n        return *this;\n    }\n\n    /*!\n    @brief get special-case overload\n\n    This overloads avoids a lot of template boilerplate, it can be seen as the\n    identity method\n\n    @tparam BasicJsonType == @ref basic_json\n\n    @return a copy of *this\n\n    @complexity Constant.\n\n    @since version 2.1.0\n    */\n    template<typename BasicJsonType,\n             detail::enable_if_t<\n                 std::is_same<BasicJsonType, basic_json_t>::value,\n                 int> = 0>\n    basic_json get_impl(detail::priority_tag<3> /*unused*/) const\n    {\n        return *this;\n    }\n\n    /*!\n    @brief get a pointer value (explicit)\n    @copydoc get()\n    */\n    template<typename PointerType,\n             detail::enable_if_t<\n                 std::is_pointer<PointerType>::value,\n                 int> = 0>\n    constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept\n    -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())\n    {\n        // delegate the call to get_ptr\n        return get_ptr<PointerType>();\n    }\n\n  public:\n    /*!\n    @brief get a (pointer) value (explicit)\n\n    Performs explicit type conversion between the JSON value and a compatible value if required.\n\n    - If the requested type is a pointer to the internally stored JSON value that pointer is returned.\n    No copies are made.\n\n    - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible\n    from the current @ref basic_json.\n\n    - Otherwise the value is converted by calling the @ref json_serializer<ValueType> `from_json()`\n    method.\n\n    @tparam ValueTypeCV the provided value type\n    @tparam ValueType the returned value type\n\n    @return copy of the JSON value, converted to @tparam ValueType if necessary\n\n    @throw what @ref json_serializer<ValueType> `from_json()` method throws if conversion is required\n\n    @since version 2.1.0\n    */\n    template < typename ValueTypeCV, typename ValueType = detail::uncvref_t<ValueTypeCV>>\n#if defined(JSON_HAS_CPP_14)\n    constexpr\n#endif\n    auto get() const noexcept(\n    noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {})))\n    -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))\n    {\n        // we cannot static_assert on ValueTypeCV being non-const, because\n        // there is support for get<const basic_json_t>(), which is why we\n        // still need the uncvref\n        static_assert(!std::is_reference<ValueTypeCV>::value,\n                      \"get() cannot be used with reference types, you might want to use get_ref()\");\n        return get_impl<ValueType>(detail::priority_tag<4> {});\n    }\n\n    /*!\n    @brief get a pointer value (explicit)\n\n    Explicit pointer access to the internally stored JSON value. No copies are\n    made.\n\n    @warning The pointer becomes invalid if the underlying JSON object\n    changes.\n\n    @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref\n    object_t, @ref string_t, @ref boolean_t, @ref number_integer_t,\n    @ref number_unsigned_t, or @ref number_float_t.\n\n    @return pointer to the internally stored JSON value if the requested\n    pointer type @a PointerType fits to the JSON value; `nullptr` otherwise\n\n    @complexity Constant.\n\n    @liveexample{The example below shows how pointers to internal values of a\n    JSON value can be requested. Note that no type conversions are made and a\n    `nullptr` is returned if the value and the requested pointer type does not\n    match.,get__PointerType}\n\n    @sa see @ref get_ptr() for explicit pointer-member access\n\n    @since version 1.0.0\n    */\n    template<typename PointerType, typename std::enable_if<\n                 std::is_pointer<PointerType>::value, int>::type = 0>\n    auto get() noexcept -> decltype(std::declval<basic_json_t&>().template get_ptr<PointerType>())\n    {\n        // delegate the call to get_ptr\n        return get_ptr<PointerType>();\n    }\n\n    /// @brief get a value (explicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/get_to/\n    template < typename ValueType,\n               detail::enable_if_t <\n                   !detail::is_basic_json<ValueType>::value&&\n                   detail::has_from_json<basic_json_t, ValueType>::value,\n                   int > = 0 >\n    ValueType & get_to(ValueType& v) const noexcept(noexcept(\n                JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))\n    {\n        JSONSerializer<ValueType>::from_json(*this, v);\n        return v;\n    }\n\n    // specialization to allow calling get_to with a basic_json value\n    // see https://github.com/nlohmann/json/issues/2175\n    template<typename ValueType,\n             detail::enable_if_t <\n                 detail::is_basic_json<ValueType>::value,\n                 int> = 0>\n    ValueType & get_to(ValueType& v) const\n    {\n        v = *this;\n        return v;\n    }\n\n    template <\n        typename T, std::size_t N,\n        typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n        detail::enable_if_t <\n            detail::has_from_json<basic_json_t, Array>::value, int > = 0 >\n    Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)\n    noexcept(noexcept(JSONSerializer<Array>::from_json(\n                          std::declval<const basic_json_t&>(), v)))\n    {\n        JSONSerializer<Array>::from_json(*this, v);\n        return v;\n    }\n\n    /// @brief get a reference value (implicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/get_ref/\n    template<typename ReferenceType, typename std::enable_if<\n                 std::is_reference<ReferenceType>::value, int>::type = 0>\n    ReferenceType get_ref()\n    {\n        // delegate call to get_ref_impl\n        return get_ref_impl<ReferenceType>(*this);\n    }\n\n    /// @brief get a reference value (implicit)\n    /// @sa https://json.nlohmann.me/api/basic_json/get_ref/\n    template < typename ReferenceType, typename std::enable_if <\n                   std::is_reference<ReferenceType>::value&&\n                   std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int >::type = 0 >\n    ReferenceType get_ref() const\n    {\n        // delegate call to get_ref_impl\n        return get_ref_impl<ReferenceType>(*this);\n    }\n\n    /*!\n    @brief get a value (implicit)\n\n    Implicit type conversion between the JSON value and a compatible value.\n    The call is realized by calling @ref get() const.\n\n    @tparam ValueType non-pointer type compatible to the JSON value, for\n    instance `int` for JSON integer numbers, `bool` for JSON booleans, or\n    `std::vector` types for JSON arrays. The character type of @ref string_t\n    as well as an initializer list of this type is excluded to avoid\n    ambiguities as these types implicitly convert to `std::string`.\n\n    @return copy of the JSON value, converted to type @a ValueType\n\n    @throw type_error.302 in case passed type @a ValueType is incompatible\n    to the JSON value type (e.g., the JSON value is of type boolean, but a\n    string is requested); see example below\n\n    @complexity Linear in the size of the JSON value.\n\n    @liveexample{The example below shows several conversions from JSON values\n    to other types. There a few things to note: (1) Floating-point numbers can\n    be converted to integers\\, (2) A JSON array can be converted to a standard\n    `std::vector<short>`\\, (3) A JSON object can be converted to C++\n    associative containers such as `std::unordered_map<std::string\\,\n    json>`.,operator__ValueType}\n\n    @since version 1.0.0\n    */\n    template < typename ValueType, typename std::enable_if <\n                   detail::conjunction <\n                       detail::negation<std::is_pointer<ValueType>>,\n                       detail::negation<std::is_same<ValueType, std::nullptr_t>>,\n                       detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>,\n                                        detail::negation<std::is_same<ValueType, typename string_t::value_type>>,\n                                        detail::negation<detail::is_basic_json<ValueType>>,\n                                        detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,\n#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))\n                                                detail::negation<std::is_same<ValueType, std::string_view>>,\n#endif\n#if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI\n                                                detail::negation<std::is_same<ValueType, std::any>>,\n#endif\n                                                detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>\n                                                >::value, int >::type = 0 >\n                                        JSON_EXPLICIT operator ValueType() const\n    {\n        // delegate the call to get<>() const\n        return get<ValueType>();\n    }\n\n    /// @brief get a binary value\n    /// @sa https://json.nlohmann.me/api/basic_json/get_binary/\n    binary_t& get_binary()\n    {\n        if (!is_binary())\n        {\n            JSON_THROW(type_error::create(302, detail::concat(\"type must be binary, but is \", type_name()), this));\n        }\n\n        return *get_ptr<binary_t*>();\n    }\n\n    /// @brief get a binary value\n    /// @sa https://json.nlohmann.me/api/basic_json/get_binary/\n    const binary_t& get_binary() const\n    {\n        if (!is_binary())\n        {\n            JSON_THROW(type_error::create(302, detail::concat(\"type must be binary, but is \", type_name()), this));\n        }\n\n        return *get_ptr<const binary_t*>();\n    }\n\n    /// @}\n\n    ////////////////////\n    // element access //\n    ////////////////////\n\n    /// @name element access\n    /// Access to the JSON value.\n    /// @{\n\n    /// @brief access specified array element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    reference at(size_type idx)\n    {\n        // at only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            JSON_TRY\n            {\n                return set_parent(m_data.m_value.array->at(idx));\n            }\n            JSON_CATCH (std::out_of_range&)\n            {\n                // create better exception explanation\n                JSON_THROW(out_of_range::create(401, detail::concat(\"array index \", std::to_string(idx), \" is out of range\"), this));\n            }\n        }\n        else\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n    }\n\n    /// @brief access specified array element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    const_reference at(size_type idx) const\n    {\n        // at only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            JSON_TRY\n            {\n                return m_data.m_value.array->at(idx);\n            }\n            JSON_CATCH (std::out_of_range&)\n            {\n                // create better exception explanation\n                JSON_THROW(out_of_range::create(401, detail::concat(\"array index \", std::to_string(idx), \" is out of range\"), this));\n            }\n        }\n        else\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n    }\n\n    /// @brief access specified object element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    reference at(const typename object_t::key_type& key)\n    {\n        // at only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n\n        auto it = m_data.m_value.object->find(key);\n        if (it == m_data.m_value.object->end())\n        {\n            JSON_THROW(out_of_range::create(403, detail::concat(\"key '\", key, \"' not found\"), this));\n        }\n        return set_parent(it->second);\n    }\n\n    /// @brief access specified object element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    reference at(KeyType && key)\n    {\n        // at only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n\n        auto it = m_data.m_value.object->find(std::forward<KeyType>(key));\n        if (it == m_data.m_value.object->end())\n        {\n            JSON_THROW(out_of_range::create(403, detail::concat(\"key '\", string_t(std::forward<KeyType>(key)), \"' not found\"), this));\n        }\n        return set_parent(it->second);\n    }\n\n    /// @brief access specified object element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    const_reference at(const typename object_t::key_type& key) const\n    {\n        // at only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n\n        auto it = m_data.m_value.object->find(key);\n        if (it == m_data.m_value.object->end())\n        {\n            JSON_THROW(out_of_range::create(403, detail::concat(\"key '\", key, \"' not found\"), this));\n        }\n        return it->second;\n    }\n\n    /// @brief access specified object element with bounds checking\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    const_reference at(KeyType && key) const\n    {\n        // at only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(304, detail::concat(\"cannot use at() with \", type_name()), this));\n        }\n\n        auto it = m_data.m_value.object->find(std::forward<KeyType>(key));\n        if (it == m_data.m_value.object->end())\n        {\n            JSON_THROW(out_of_range::create(403, detail::concat(\"key '\", string_t(std::forward<KeyType>(key)), \"' not found\"), this));\n        }\n        return it->second;\n    }\n\n    /// @brief access specified array element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    reference operator[](size_type idx)\n    {\n        // implicitly convert null value to an empty array\n        if (is_null())\n        {\n            m_data.m_type = value_t::array;\n            m_data.m_value.array = create<array_t>();\n            assert_invariant();\n        }\n\n        // operator[] only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            // fill up array with null values if given idx is outside range\n            if (idx >= m_data.m_value.array->size())\n            {\n#if JSON_DIAGNOSTICS\n                // remember array size & capacity before resizing\n                const auto old_size = m_data.m_value.array->size();\n                const auto old_capacity = m_data.m_value.array->capacity();\n#endif\n                m_data.m_value.array->resize(idx + 1);\n\n#if JSON_DIAGNOSTICS\n                if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))\n                {\n                    // capacity has changed: update all parents\n                    set_parents();\n                }\n                else\n                {\n                    // set parent for values added above\n                    set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size));\n                }\n#endif\n                assert_invariant();\n            }\n\n            return m_data.m_value.array->operator[](idx);\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a numeric argument with \", type_name()), this));\n    }\n\n    /// @brief access specified array element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    const_reference operator[](size_type idx) const\n    {\n        // const operator[] only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            return m_data.m_value.array->operator[](idx);\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a numeric argument with \", type_name()), this));\n    }\n\n    /// @brief access specified object element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    reference operator[](typename object_t::key_type key)\n    {\n        // implicitly convert null value to an empty object\n        if (is_null())\n        {\n            m_data.m_type = value_t::object;\n            m_data.m_value.object = create<object_t>();\n            assert_invariant();\n        }\n\n        // operator[] only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            auto result = m_data.m_value.object->emplace(std::move(key), nullptr);\n            return set_parent(result.first->second);\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a string argument with \", type_name()), this));\n    }\n\n    /// @brief access specified object element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    const_reference operator[](const typename object_t::key_type& key) const\n    {\n        // const operator[] only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            auto it = m_data.m_value.object->find(key);\n            JSON_ASSERT(it != m_data.m_value.object->end());\n            return it->second;\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a string argument with \", type_name()), this));\n    }\n\n    // these two functions resolve a (const) char * ambiguity affecting Clang and MSVC\n    // (they seemingly cannot be constrained to resolve the ambiguity)\n    template<typename T>\n    reference operator[](T* key)\n    {\n        return operator[](typename object_t::key_type(key));\n    }\n\n    template<typename T>\n    const_reference operator[](T* key) const\n    {\n        return operator[](typename object_t::key_type(key));\n    }\n\n    /// @brief access specified object element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >\n    reference operator[](KeyType && key)\n    {\n        // implicitly convert null value to an empty object\n        if (is_null())\n        {\n            m_data.m_type = value_t::object;\n            m_data.m_value.object = create<object_t>();\n            assert_invariant();\n        }\n\n        // operator[] only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            auto result = m_data.m_value.object->emplace(std::forward<KeyType>(key), nullptr);\n            return set_parent(result.first->second);\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a string argument with \", type_name()), this));\n    }\n\n    /// @brief access specified object element\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >\n    const_reference operator[](KeyType && key) const\n    {\n        // const operator[] only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            auto it = m_data.m_value.object->find(std::forward<KeyType>(key));\n            JSON_ASSERT(it != m_data.m_value.object->end());\n            return it->second;\n        }\n\n        JSON_THROW(type_error::create(305, detail::concat(\"cannot use operator[] with a string argument with \", type_name()), this));\n    }\n\n  private:\n    template<typename KeyType>\n    using is_comparable_with_object_key = detail::is_comparable <\n        object_comparator_t, const typename object_t::key_type&, KeyType >;\n\n    template<typename ValueType>\n    using value_return_type = std::conditional <\n        detail::is_c_string_uncvref<ValueType>::value,\n        string_t, typename std::decay<ValueType>::type >;\n\n  public:\n    /// @brief access specified object element with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, detail::enable_if_t <\n                   !detail::is_transparent<object_comparator_t>::value\n                   && detail::is_getable<basic_json_t, ValueType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if key is found, return value and given default value otherwise\n            const auto it = find(key);\n            if (it != end())\n            {\n                return it->template get<ValueType>();\n            }\n\n            return default_value;\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    /// @brief access specified object element with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,\n               detail::enable_if_t <\n                   !detail::is_transparent<object_comparator_t>::value\n                   && detail::is_getable<basic_json_t, ReturnType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ReturnType value(const typename object_t::key_type& key, ValueType && default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if key is found, return value and given default value otherwise\n            const auto it = find(key);\n            if (it != end())\n            {\n                return it->template get<ReturnType>();\n            }\n\n            return std::forward<ValueType>(default_value);\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    /// @brief access specified object element with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, class KeyType, detail::enable_if_t <\n                   detail::is_transparent<object_comparator_t>::value\n                   && !detail::is_json_pointer<KeyType>::value\n                   && is_comparable_with_object_key<KeyType>::value\n                   && detail::is_getable<basic_json_t, ValueType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ValueType value(KeyType && key, const ValueType& default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if key is found, return value and given default value otherwise\n            const auto it = find(std::forward<KeyType>(key));\n            if (it != end())\n            {\n                return it->template get<ValueType>();\n            }\n\n            return default_value;\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    /// @brief access specified object element via JSON Pointer with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type,\n               detail::enable_if_t <\n                   detail::is_transparent<object_comparator_t>::value\n                   && !detail::is_json_pointer<KeyType>::value\n                   && is_comparable_with_object_key<KeyType>::value\n                   && detail::is_getable<basic_json_t, ReturnType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ReturnType value(KeyType && key, ValueType && default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if key is found, return value and given default value otherwise\n            const auto it = find(std::forward<KeyType>(key));\n            if (it != end())\n            {\n                return it->template get<ReturnType>();\n            }\n\n            return std::forward<ValueType>(default_value);\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    /// @brief access specified object element via JSON Pointer with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, detail::enable_if_t <\n                   detail::is_getable<basic_json_t, ValueType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ValueType value(const json_pointer& ptr, const ValueType& default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if pointer resolves a value, return it or use default value\n            JSON_TRY\n            {\n                return ptr.get_checked(this).template get<ValueType>();\n            }\n            JSON_INTERNAL_CATCH (out_of_range&)\n            {\n                return default_value;\n            }\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    /// @brief access specified object element via JSON Pointer with default value\n    /// @sa https://json.nlohmann.me/api/basic_json/value/\n    template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,\n               detail::enable_if_t <\n                   detail::is_getable<basic_json_t, ReturnType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    ReturnType value(const json_pointer& ptr, ValueType && default_value) const\n    {\n        // value only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            // if pointer resolves a value, return it or use default value\n            JSON_TRY\n            {\n                return ptr.get_checked(this).template get<ReturnType>();\n            }\n            JSON_INTERNAL_CATCH (out_of_range&)\n            {\n                return std::forward<ValueType>(default_value);\n            }\n        }\n\n        JSON_THROW(type_error::create(306, detail::concat(\"cannot use value() with \", type_name()), this));\n    }\n\n    template < class ValueType, class BasicJsonType, detail::enable_if_t <\n                   detail::is_basic_json<BasicJsonType>::value\n                   && detail::is_getable<basic_json_t, ValueType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const\n    {\n        return value(ptr.convert(), default_value);\n    }\n\n    template < class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type,\n               detail::enable_if_t <\n                   detail::is_basic_json<BasicJsonType>::value\n                   && detail::is_getable<basic_json_t, ReturnType>::value\n                   && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType && default_value) const\n    {\n        return value(ptr.convert(), std::forward<ValueType>(default_value));\n    }\n\n    /// @brief access the first element\n    /// @sa https://json.nlohmann.me/api/basic_json/front/\n    reference front()\n    {\n        return *begin();\n    }\n\n    /// @brief access the first element\n    /// @sa https://json.nlohmann.me/api/basic_json/front/\n    const_reference front() const\n    {\n        return *cbegin();\n    }\n\n    /// @brief access the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/back/\n    reference back()\n    {\n        auto tmp = end();\n        --tmp;\n        return *tmp;\n    }\n\n    /// @brief access the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/back/\n    const_reference back() const\n    {\n        auto tmp = cend();\n        --tmp;\n        return *tmp;\n    }\n\n    /// @brief remove element given an iterator\n    /// @sa https://json.nlohmann.me/api/basic_json/erase/\n    template < class IteratorType, detail::enable_if_t <\n                   std::is_same<IteratorType, typename basic_json_t::iterator>::value ||\n                   std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >\n    IteratorType erase(IteratorType pos)\n    {\n        // make sure iterator fits the current value\n        if (JSON_HEDLEY_UNLIKELY(this != pos.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(202, \"iterator does not fit current value\", this));\n        }\n\n        IteratorType result = end();\n\n        switch (m_data.m_type)\n        {\n            case value_t::boolean:\n            case value_t::number_float:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::string:\n            case value_t::binary:\n            {\n                if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin()))\n                {\n                    JSON_THROW(invalid_iterator::create(205, \"iterator out of range\", this));\n                }\n\n                if (is_string())\n                {\n                    AllocatorType<string_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);\n                    m_data.m_value.string = nullptr;\n                }\n                else if (is_binary())\n                {\n                    AllocatorType<binary_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);\n                    m_data.m_value.binary = nullptr;\n                }\n\n                m_data.m_type = value_t::null;\n                assert_invariant();\n                break;\n            }\n\n            case value_t::object:\n            {\n                result.m_it.object_iterator = m_data.m_value.object->erase(pos.m_it.object_iterator);\n                break;\n            }\n\n            case value_t::array:\n            {\n                result.m_it.array_iterator = m_data.m_value.array->erase(pos.m_it.array_iterator);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::discarded:\n            default:\n                JSON_THROW(type_error::create(307, detail::concat(\"cannot use erase() with \", type_name()), this));\n        }\n\n        return result;\n    }\n\n    /// @brief remove elements given an iterator range\n    /// @sa https://json.nlohmann.me/api/basic_json/erase/\n    template < class IteratorType, detail::enable_if_t <\n                   std::is_same<IteratorType, typename basic_json_t::iterator>::value ||\n                   std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >\n    IteratorType erase(IteratorType first, IteratorType last)\n    {\n        // make sure iterator fits the current value\n        if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(203, \"iterators do not fit current value\", this));\n        }\n\n        IteratorType result = end();\n\n        switch (m_data.m_type)\n        {\n            case value_t::boolean:\n            case value_t::number_float:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::string:\n            case value_t::binary:\n            {\n                if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin()\n                                       || !last.m_it.primitive_iterator.is_end()))\n                {\n                    JSON_THROW(invalid_iterator::create(204, \"iterators out of range\", this));\n                }\n\n                if (is_string())\n                {\n                    AllocatorType<string_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);\n                    m_data.m_value.string = nullptr;\n                }\n                else if (is_binary())\n                {\n                    AllocatorType<binary_t> alloc;\n                    std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);\n                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);\n                    m_data.m_value.binary = nullptr;\n                }\n\n                m_data.m_type = value_t::null;\n                assert_invariant();\n                break;\n            }\n\n            case value_t::object:\n            {\n                result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,\n                                              last.m_it.object_iterator);\n                break;\n            }\n\n            case value_t::array:\n            {\n                result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,\n                                             last.m_it.array_iterator);\n                break;\n            }\n\n            case value_t::null:\n            case value_t::discarded:\n            default:\n                JSON_THROW(type_error::create(307, detail::concat(\"cannot use erase() with \", type_name()), this));\n        }\n\n        return result;\n    }\n\n  private:\n    template < typename KeyType, detail::enable_if_t <\n                   detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >\n    size_type erase_internal(KeyType && key)\n    {\n        // this erase only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(307, detail::concat(\"cannot use erase() with \", type_name()), this));\n        }\n\n        return m_data.m_value.object->erase(std::forward<KeyType>(key));\n    }\n\n    template < typename KeyType, detail::enable_if_t <\n                   !detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >\n    size_type erase_internal(KeyType && key)\n    {\n        // this erase only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(307, detail::concat(\"cannot use erase() with \", type_name()), this));\n        }\n\n        const auto it = m_data.m_value.object->find(std::forward<KeyType>(key));\n        if (it != m_data.m_value.object->end())\n        {\n            m_data.m_value.object->erase(it);\n            return 1;\n        }\n        return 0;\n    }\n\n  public:\n\n    /// @brief remove element from a JSON object given a key\n    /// @sa https://json.nlohmann.me/api/basic_json/erase/\n    size_type erase(const typename object_t::key_type& key)\n    {\n        // the indirection via erase_internal() is added to avoid making this\n        // function a template and thus de-rank it during overload resolution\n        return erase_internal(key);\n    }\n\n    /// @brief remove element from a JSON object given a key\n    /// @sa https://json.nlohmann.me/api/basic_json/erase/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    size_type erase(KeyType && key)\n    {\n        return erase_internal(std::forward<KeyType>(key));\n    }\n\n    /// @brief remove element from a JSON array given an index\n    /// @sa https://json.nlohmann.me/api/basic_json/erase/\n    void erase(const size_type idx)\n    {\n        // this erase only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            if (JSON_HEDLEY_UNLIKELY(idx >= size()))\n            {\n                JSON_THROW(out_of_range::create(401, detail::concat(\"array index \", std::to_string(idx), \" is out of range\"), this));\n            }\n\n            m_data.m_value.array->erase(m_data.m_value.array->begin() + static_cast<difference_type>(idx));\n        }\n        else\n        {\n            JSON_THROW(type_error::create(307, detail::concat(\"cannot use erase() with \", type_name()), this));\n        }\n    }\n\n    /// @}\n\n    ////////////\n    // lookup //\n    ////////////\n\n    /// @name lookup\n    /// @{\n\n    /// @brief find an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/find/\n    iterator find(const typename object_t::key_type& key)\n    {\n        auto result = end();\n\n        if (is_object())\n        {\n            result.m_it.object_iterator = m_data.m_value.object->find(key);\n        }\n\n        return result;\n    }\n\n    /// @brief find an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/find/\n    const_iterator find(const typename object_t::key_type& key) const\n    {\n        auto result = cend();\n\n        if (is_object())\n        {\n            result.m_it.object_iterator = m_data.m_value.object->find(key);\n        }\n\n        return result;\n    }\n\n    /// @brief find an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/find/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    iterator find(KeyType && key)\n    {\n        auto result = end();\n\n        if (is_object())\n        {\n            result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));\n        }\n\n        return result;\n    }\n\n    /// @brief find an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/find/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    const_iterator find(KeyType && key) const\n    {\n        auto result = cend();\n\n        if (is_object())\n        {\n            result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));\n        }\n\n        return result;\n    }\n\n    /// @brief returns the number of occurrences of a key in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/count/\n    size_type count(const typename object_t::key_type& key) const\n    {\n        // return 0 for all nonobject types\n        return is_object() ? m_data.m_value.object->count(key) : 0;\n    }\n\n    /// @brief returns the number of occurrences of a key in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/count/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    size_type count(KeyType && key) const\n    {\n        // return 0 for all nonobject types\n        return is_object() ? m_data.m_value.object->count(std::forward<KeyType>(key)) : 0;\n    }\n\n    /// @brief check the existence of an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/contains/\n    bool contains(const typename object_t::key_type& key) const\n    {\n        return is_object() && m_data.m_value.object->find(key) != m_data.m_value.object->end();\n    }\n\n    /// @brief check the existence of an element in a JSON object\n    /// @sa https://json.nlohmann.me/api/basic_json/contains/\n    template<class KeyType, detail::enable_if_t<\n                 detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>\n    bool contains(KeyType && key) const\n    {\n        return is_object() && m_data.m_value.object->find(std::forward<KeyType>(key)) != m_data.m_value.object->end();\n    }\n\n    /// @brief check the existence of an element in a JSON object given a JSON pointer\n    /// @sa https://json.nlohmann.me/api/basic_json/contains/\n    bool contains(const json_pointer& ptr) const\n    {\n        return ptr.contains(this);\n    }\n\n    template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& ptr) const\n    {\n        return ptr.contains(this);\n    }\n\n    /// @}\n\n    ///////////////\n    // iterators //\n    ///////////////\n\n    /// @name iterators\n    /// @{\n\n    /// @brief returns an iterator to the first element\n    /// @sa https://json.nlohmann.me/api/basic_json/begin/\n    iterator begin() noexcept\n    {\n        iterator result(this);\n        result.set_begin();\n        return result;\n    }\n\n    /// @brief returns an iterator to the first element\n    /// @sa https://json.nlohmann.me/api/basic_json/begin/\n    const_iterator begin() const noexcept\n    {\n        return cbegin();\n    }\n\n    /// @brief returns a const iterator to the first element\n    /// @sa https://json.nlohmann.me/api/basic_json/cbegin/\n    const_iterator cbegin() const noexcept\n    {\n        const_iterator result(this);\n        result.set_begin();\n        return result;\n    }\n\n    /// @brief returns an iterator to one past the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/end/\n    iterator end() noexcept\n    {\n        iterator result(this);\n        result.set_end();\n        return result;\n    }\n\n    /// @brief returns an iterator to one past the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/end/\n    const_iterator end() const noexcept\n    {\n        return cend();\n    }\n\n    /// @brief returns an iterator to one past the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/cend/\n    const_iterator cend() const noexcept\n    {\n        const_iterator result(this);\n        result.set_end();\n        return result;\n    }\n\n    /// @brief returns an iterator to the reverse-beginning\n    /// @sa https://json.nlohmann.me/api/basic_json/rbegin/\n    reverse_iterator rbegin() noexcept\n    {\n        return reverse_iterator(end());\n    }\n\n    /// @brief returns an iterator to the reverse-beginning\n    /// @sa https://json.nlohmann.me/api/basic_json/rbegin/\n    const_reverse_iterator rbegin() const noexcept\n    {\n        return crbegin();\n    }\n\n    /// @brief returns an iterator to the reverse-end\n    /// @sa https://json.nlohmann.me/api/basic_json/rend/\n    reverse_iterator rend() noexcept\n    {\n        return reverse_iterator(begin());\n    }\n\n    /// @brief returns an iterator to the reverse-end\n    /// @sa https://json.nlohmann.me/api/basic_json/rend/\n    const_reverse_iterator rend() const noexcept\n    {\n        return crend();\n    }\n\n    /// @brief returns a const reverse iterator to the last element\n    /// @sa https://json.nlohmann.me/api/basic_json/crbegin/\n    const_reverse_iterator crbegin() const noexcept\n    {\n        return const_reverse_iterator(cend());\n    }\n\n    /// @brief returns a const reverse iterator to one before the first\n    /// @sa https://json.nlohmann.me/api/basic_json/crend/\n    const_reverse_iterator crend() const noexcept\n    {\n        return const_reverse_iterator(cbegin());\n    }\n\n  public:\n    /// @brief wrapper to access iterator member functions in range-based for\n    /// @sa https://json.nlohmann.me/api/basic_json/items/\n    /// @deprecated This function is deprecated since 3.1.0 and will be removed in\n    ///             version 4.0.0 of the library. Please use @ref items() instead;\n    ///             that is, replace `json::iterator_wrapper(j)` with `j.items()`.\n    JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())\n    static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept\n    {\n        return ref.items();\n    }\n\n    /// @brief wrapper to access iterator member functions in range-based for\n    /// @sa https://json.nlohmann.me/api/basic_json/items/\n    /// @deprecated This function is deprecated since 3.1.0 and will be removed in\n    ///         version 4.0.0 of the library. Please use @ref items() instead;\n    ///         that is, replace `json::iterator_wrapper(j)` with `j.items()`.\n    JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())\n    static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref) noexcept\n    {\n        return ref.items();\n    }\n\n    /// @brief helper to access iterator member functions in range-based for\n    /// @sa https://json.nlohmann.me/api/basic_json/items/\n    iteration_proxy<iterator> items() noexcept\n    {\n        return iteration_proxy<iterator>(*this);\n    }\n\n    /// @brief helper to access iterator member functions in range-based for\n    /// @sa https://json.nlohmann.me/api/basic_json/items/\n    iteration_proxy<const_iterator> items() const noexcept\n    {\n        return iteration_proxy<const_iterator>(*this);\n    }\n\n    /// @}\n\n    //////////////\n    // capacity //\n    //////////////\n\n    /// @name capacity\n    /// @{\n\n    /// @brief checks whether the container is empty.\n    /// @sa https://json.nlohmann.me/api/basic_json/empty/\n    bool empty() const noexcept\n    {\n        switch (m_data.m_type)\n        {\n            case value_t::null:\n            {\n                // null values are empty\n                return true;\n            }\n\n            case value_t::array:\n            {\n                // delegate call to array_t::empty()\n                return m_data.m_value.array->empty();\n            }\n\n            case value_t::object:\n            {\n                // delegate call to object_t::empty()\n                return m_data.m_value.object->empty();\n            }\n\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                // all other types are nonempty\n                return false;\n            }\n        }\n    }\n\n    /// @brief returns the number of elements\n    /// @sa https://json.nlohmann.me/api/basic_json/size/\n    size_type size() const noexcept\n    {\n        switch (m_data.m_type)\n        {\n            case value_t::null:\n            {\n                // null values are empty\n                return 0;\n            }\n\n            case value_t::array:\n            {\n                // delegate call to array_t::size()\n                return m_data.m_value.array->size();\n            }\n\n            case value_t::object:\n            {\n                // delegate call to object_t::size()\n                return m_data.m_value.object->size();\n            }\n\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                // all other types have size 1\n                return 1;\n            }\n        }\n    }\n\n    /// @brief returns the maximum possible number of elements\n    /// @sa https://json.nlohmann.me/api/basic_json/max_size/\n    size_type max_size() const noexcept\n    {\n        switch (m_data.m_type)\n        {\n            case value_t::array:\n            {\n                // delegate call to array_t::max_size()\n                return m_data.m_value.array->max_size();\n            }\n\n            case value_t::object:\n            {\n                // delegate call to object_t::max_size()\n                return m_data.m_value.object->max_size();\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                // all other types have max_size() == size()\n                return size();\n            }\n        }\n    }\n\n    /// @}\n\n    ///////////////\n    // modifiers //\n    ///////////////\n\n    /// @name modifiers\n    /// @{\n\n    /// @brief clears the contents\n    /// @sa https://json.nlohmann.me/api/basic_json/clear/\n    void clear() noexcept\n    {\n        switch (m_data.m_type)\n        {\n            case value_t::number_integer:\n            {\n                m_data.m_value.number_integer = 0;\n                break;\n            }\n\n            case value_t::number_unsigned:\n            {\n                m_data.m_value.number_unsigned = 0;\n                break;\n            }\n\n            case value_t::number_float:\n            {\n                m_data.m_value.number_float = 0.0;\n                break;\n            }\n\n            case value_t::boolean:\n            {\n                m_data.m_value.boolean = false;\n                break;\n            }\n\n            case value_t::string:\n            {\n                m_data.m_value.string->clear();\n                break;\n            }\n\n            case value_t::binary:\n            {\n                m_data.m_value.binary->clear();\n                break;\n            }\n\n            case value_t::array:\n            {\n                m_data.m_value.array->clear();\n                break;\n            }\n\n            case value_t::object:\n            {\n                m_data.m_value.object->clear();\n                break;\n            }\n\n            case value_t::null:\n            case value_t::discarded:\n            default:\n                break;\n        }\n    }\n\n    /// @brief add an object to an array\n    /// @sa https://json.nlohmann.me/api/basic_json/push_back/\n    void push_back(basic_json&& val)\n    {\n        // push_back only works for null objects or arrays\n        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))\n        {\n            JSON_THROW(type_error::create(308, detail::concat(\"cannot use push_back() with \", type_name()), this));\n        }\n\n        // transform null object into an array\n        if (is_null())\n        {\n            m_data.m_type = value_t::array;\n            m_data.m_value = value_t::array;\n            assert_invariant();\n        }\n\n        // add element to array (move semantics)\n        const auto old_capacity = m_data.m_value.array->capacity();\n        m_data.m_value.array->push_back(std::move(val));\n        set_parent(m_data.m_value.array->back(), old_capacity);\n        // if val is moved from, basic_json move constructor marks it null, so we do not call the destructor\n    }\n\n    /// @brief add an object to an array\n    /// @sa https://json.nlohmann.me/api/basic_json/operator+=/\n    reference operator+=(basic_json&& val)\n    {\n        push_back(std::move(val));\n        return *this;\n    }\n\n    /// @brief add an object to an array\n    /// @sa https://json.nlohmann.me/api/basic_json/push_back/\n    void push_back(const basic_json& val)\n    {\n        // push_back only works for null objects or arrays\n        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))\n        {\n            JSON_THROW(type_error::create(308, detail::concat(\"cannot use push_back() with \", type_name()), this));\n        }\n\n        // transform null object into an array\n        if (is_null())\n        {\n            m_data.m_type = value_t::array;\n            m_data.m_value = value_t::array;\n            assert_invariant();\n        }\n\n        // add element to array\n        const auto old_capacity = m_data.m_value.array->capacity();\n        m_data.m_value.array->push_back(val);\n        set_parent(m_data.m_value.array->back(), old_capacity);\n    }\n\n    /// @brief add an object to an array\n    /// @sa https://json.nlohmann.me/api/basic_json/operator+=/\n    reference operator+=(const basic_json& val)\n    {\n        push_back(val);\n        return *this;\n    }\n\n    /// @brief add an object to an object\n    /// @sa https://json.nlohmann.me/api/basic_json/push_back/\n    void push_back(const typename object_t::value_type& val)\n    {\n        // push_back only works for null objects or objects\n        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))\n        {\n            JSON_THROW(type_error::create(308, detail::concat(\"cannot use push_back() with \", type_name()), this));\n        }\n\n        // transform null object into an object\n        if (is_null())\n        {\n            m_data.m_type = value_t::object;\n            m_data.m_value = value_t::object;\n            assert_invariant();\n        }\n\n        // add element to object\n        auto res = m_data.m_value.object->insert(val);\n        set_parent(res.first->second);\n    }\n\n    /// @brief add an object to an object\n    /// @sa https://json.nlohmann.me/api/basic_json/operator+=/\n    reference operator+=(const typename object_t::value_type& val)\n    {\n        push_back(val);\n        return *this;\n    }\n\n    /// @brief add an object to an object\n    /// @sa https://json.nlohmann.me/api/basic_json/push_back/\n    void push_back(initializer_list_t init)\n    {\n        if (is_object() && init.size() == 2 && (*init.begin())->is_string())\n        {\n            basic_json&& key = init.begin()->moved_or_copied();\n            push_back(typename object_t::value_type(\n                          std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));\n        }\n        else\n        {\n            push_back(basic_json(init));\n        }\n    }\n\n    /// @brief add an object to an object\n    /// @sa https://json.nlohmann.me/api/basic_json/operator+=/\n    reference operator+=(initializer_list_t init)\n    {\n        push_back(init);\n        return *this;\n    }\n\n    /// @brief add an object to an array\n    /// @sa https://json.nlohmann.me/api/basic_json/emplace_back/\n    template<class... Args>\n    reference emplace_back(Args&& ... args)\n    {\n        // emplace_back only works for null objects or arrays\n        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))\n        {\n            JSON_THROW(type_error::create(311, detail::concat(\"cannot use emplace_back() with \", type_name()), this));\n        }\n\n        // transform null object into an array\n        if (is_null())\n        {\n            m_data.m_type = value_t::array;\n            m_data.m_value = value_t::array;\n            assert_invariant();\n        }\n\n        // add element to array (perfect forwarding)\n        const auto old_capacity = m_data.m_value.array->capacity();\n        m_data.m_value.array->emplace_back(std::forward<Args>(args)...);\n        return set_parent(m_data.m_value.array->back(), old_capacity);\n    }\n\n    /// @brief add an object to an object if key does not exist\n    /// @sa https://json.nlohmann.me/api/basic_json/emplace/\n    template<class... Args>\n    std::pair<iterator, bool> emplace(Args&& ... args)\n    {\n        // emplace only works for null objects or arrays\n        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))\n        {\n            JSON_THROW(type_error::create(311, detail::concat(\"cannot use emplace() with \", type_name()), this));\n        }\n\n        // transform null object into an object\n        if (is_null())\n        {\n            m_data.m_type = value_t::object;\n            m_data.m_value = value_t::object;\n            assert_invariant();\n        }\n\n        // add element to array (perfect forwarding)\n        auto res = m_data.m_value.object->emplace(std::forward<Args>(args)...);\n        set_parent(res.first->second);\n\n        // create result iterator and set iterator to the result of emplace\n        auto it = begin();\n        it.m_it.object_iterator = res.first;\n\n        // return pair of iterator and boolean\n        return {it, res.second};\n    }\n\n    /// Helper for insertion of an iterator\n    /// @note: This uses std::distance to support GCC 4.8,\n    ///        see https://github.com/nlohmann/json/pull/1257\n    template<typename... Args>\n    iterator insert_iterator(const_iterator pos, Args&& ... args)\n    {\n        iterator result(this);\n        JSON_ASSERT(m_data.m_value.array != nullptr);\n\n        auto insert_pos = std::distance(m_data.m_value.array->begin(), pos.m_it.array_iterator);\n        m_data.m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...);\n        result.m_it.array_iterator = m_data.m_value.array->begin() + insert_pos;\n\n        // This could have been written as:\n        // result.m_it.array_iterator = m_data.m_value.array->insert(pos.m_it.array_iterator, cnt, val);\n        // but the return value of insert is missing in GCC 4.8, so it is written this way instead.\n\n        set_parents();\n        return result;\n    }\n\n    /// @brief inserts element into array\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    iterator insert(const_iterator pos, const basic_json& val)\n    {\n        // insert only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            // check if iterator pos fits to this JSON value\n            if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))\n            {\n                JSON_THROW(invalid_iterator::create(202, \"iterator does not fit current value\", this));\n            }\n\n            // insert to array and return iterator\n            return insert_iterator(pos, val);\n        }\n\n        JSON_THROW(type_error::create(309, detail::concat(\"cannot use insert() with \", type_name()), this));\n    }\n\n    /// @brief inserts element into array\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    iterator insert(const_iterator pos, basic_json&& val)\n    {\n        return insert(pos, val);\n    }\n\n    /// @brief inserts copies of element into array\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    iterator insert(const_iterator pos, size_type cnt, const basic_json& val)\n    {\n        // insert only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            // check if iterator pos fits to this JSON value\n            if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))\n            {\n                JSON_THROW(invalid_iterator::create(202, \"iterator does not fit current value\", this));\n            }\n\n            // insert to array and return iterator\n            return insert_iterator(pos, cnt, val);\n        }\n\n        JSON_THROW(type_error::create(309, detail::concat(\"cannot use insert() with \", type_name()), this));\n    }\n\n    /// @brief inserts range of elements into array\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    iterator insert(const_iterator pos, const_iterator first, const_iterator last)\n    {\n        // insert only works for arrays\n        if (JSON_HEDLEY_UNLIKELY(!is_array()))\n        {\n            JSON_THROW(type_error::create(309, detail::concat(\"cannot use insert() with \", type_name()), this));\n        }\n\n        // check if iterator pos fits to this JSON value\n        if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))\n        {\n            JSON_THROW(invalid_iterator::create(202, \"iterator does not fit current value\", this));\n        }\n\n        // check if range iterators belong to the same JSON object\n        if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(210, \"iterators do not fit\", this));\n        }\n\n        if (JSON_HEDLEY_UNLIKELY(first.m_object == this))\n        {\n            JSON_THROW(invalid_iterator::create(211, \"passed iterators may not belong to container\", this));\n        }\n\n        // insert to array and return iterator\n        return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator);\n    }\n\n    /// @brief inserts elements from initializer list into array\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    iterator insert(const_iterator pos, initializer_list_t ilist)\n    {\n        // insert only works for arrays\n        if (JSON_HEDLEY_UNLIKELY(!is_array()))\n        {\n            JSON_THROW(type_error::create(309, detail::concat(\"cannot use insert() with \", type_name()), this));\n        }\n\n        // check if iterator pos fits to this JSON value\n        if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))\n        {\n            JSON_THROW(invalid_iterator::create(202, \"iterator does not fit current value\", this));\n        }\n\n        // insert to array and return iterator\n        return insert_iterator(pos, ilist.begin(), ilist.end());\n    }\n\n    /// @brief inserts range of elements into object\n    /// @sa https://json.nlohmann.me/api/basic_json/insert/\n    void insert(const_iterator first, const_iterator last)\n    {\n        // insert only works for objects\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(309, detail::concat(\"cannot use insert() with \", type_name()), this));\n        }\n\n        // check if range iterators belong to the same JSON object\n        if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(210, \"iterators do not fit\", this));\n        }\n\n        // passed iterators must belong to objects\n        if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))\n        {\n            JSON_THROW(invalid_iterator::create(202, \"iterators first and last must point to objects\", this));\n        }\n\n        m_data.m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator);\n    }\n\n    /// @brief updates a JSON object from another object, overwriting existing keys\n    /// @sa https://json.nlohmann.me/api/basic_json/update/\n    void update(const_reference j, bool merge_objects = false)\n    {\n        update(j.begin(), j.end(), merge_objects);\n    }\n\n    /// @brief updates a JSON object from another object, overwriting existing keys\n    /// @sa https://json.nlohmann.me/api/basic_json/update/\n    void update(const_iterator first, const_iterator last, bool merge_objects = false)\n    {\n        // implicitly convert null value to an empty object\n        if (is_null())\n        {\n            m_data.m_type = value_t::object;\n            m_data.m_value.object = create<object_t>();\n            assert_invariant();\n        }\n\n        if (JSON_HEDLEY_UNLIKELY(!is_object()))\n        {\n            JSON_THROW(type_error::create(312, detail::concat(\"cannot use update() with \", type_name()), this));\n        }\n\n        // check if range iterators belong to the same JSON object\n        if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))\n        {\n            JSON_THROW(invalid_iterator::create(210, \"iterators do not fit\", this));\n        }\n\n        // passed iterators must belong to objects\n        if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))\n        {\n            JSON_THROW(type_error::create(312, detail::concat(\"cannot use update() with \", first.m_object->type_name()), first.m_object));\n        }\n\n        for (auto it = first; it != last; ++it)\n        {\n            if (merge_objects && it.value().is_object())\n            {\n                auto it2 = m_data.m_value.object->find(it.key());\n                if (it2 != m_data.m_value.object->end())\n                {\n                    it2->second.update(it.value(), true);\n                    continue;\n                }\n            }\n            m_data.m_value.object->operator[](it.key()) = it.value();\n#if JSON_DIAGNOSTICS\n            m_data.m_value.object->operator[](it.key()).m_parent = this;\n#endif\n        }\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(reference other) noexcept (\n        std::is_nothrow_move_constructible<value_t>::value&&\n        std::is_nothrow_move_assignable<value_t>::value&&\n        std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n        std::is_nothrow_move_assignable<json_value>::value\n    )\n    {\n        std::swap(m_data.m_type, other.m_data.m_type);\n        std::swap(m_data.m_value, other.m_data.m_value);\n\n        set_parents();\n        other.set_parents();\n        assert_invariant();\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    friend void swap(reference left, reference right) noexcept (\n        std::is_nothrow_move_constructible<value_t>::value&&\n        std::is_nothrow_move_assignable<value_t>::value&&\n        std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n        std::is_nothrow_move_assignable<json_value>::value\n    )\n    {\n        left.swap(right);\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n    {\n        // swap only works for arrays\n        if (JSON_HEDLEY_LIKELY(is_array()))\n        {\n            using std::swap;\n            swap(*(m_data.m_value.array), other);\n        }\n        else\n        {\n            JSON_THROW(type_error::create(310, detail::concat(\"cannot use swap(array_t&) with \", type_name()), this));\n        }\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n    {\n        // swap only works for objects\n        if (JSON_HEDLEY_LIKELY(is_object()))\n        {\n            using std::swap;\n            swap(*(m_data.m_value.object), other);\n        }\n        else\n        {\n            JSON_THROW(type_error::create(310, detail::concat(\"cannot use swap(object_t&) with \", type_name()), this));\n        }\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n    {\n        // swap only works for strings\n        if (JSON_HEDLEY_LIKELY(is_string()))\n        {\n            using std::swap;\n            swap(*(m_data.m_value.string), other);\n        }\n        else\n        {\n            JSON_THROW(type_error::create(310, detail::concat(\"cannot use swap(string_t&) with \", type_name()), this));\n        }\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n    {\n        // swap only works for strings\n        if (JSON_HEDLEY_LIKELY(is_binary()))\n        {\n            using std::swap;\n            swap(*(m_data.m_value.binary), other);\n        }\n        else\n        {\n            JSON_THROW(type_error::create(310, detail::concat(\"cannot use swap(binary_t&) with \", type_name()), this));\n        }\n    }\n\n    /// @brief exchanges the values\n    /// @sa https://json.nlohmann.me/api/basic_json/swap/\n    void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape)\n    {\n        // swap only works for strings\n        if (JSON_HEDLEY_LIKELY(is_binary()))\n        {\n            using std::swap;\n            swap(*(m_data.m_value.binary), other);\n        }\n        else\n        {\n            JSON_THROW(type_error::create(310, detail::concat(\"cannot use swap(binary_t::container_type&) with \", type_name()), this));\n        }\n    }\n\n    /// @}\n\n    //////////////////////////////////////////\n    // lexicographical comparison operators //\n    //////////////////////////////////////////\n\n    /// @name lexicographical comparison operators\n    /// @{\n\n    // note parentheses around operands are necessary; see\n    // https://github.com/nlohmann/json/issues/1530\n#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result)                       \\\n    const auto lhs_type = lhs.type();                                                                    \\\n    const auto rhs_type = rhs.type();                                                                    \\\n    \\\n    if (lhs_type == rhs_type) /* NOLINT(readability/braces) */                                           \\\n    {                                                                                                    \\\n        switch (lhs_type)                                                                                \\\n        {                                                                                                \\\n            case value_t::array:                                                                         \\\n                return (*lhs.m_data.m_value.array) op (*rhs.m_data.m_value.array);                                     \\\n                \\\n            case value_t::object:                                                                        \\\n                return (*lhs.m_data.m_value.object) op (*rhs.m_data.m_value.object);                                   \\\n                \\\n            case value_t::null:                                                                          \\\n                return (null_result);                                                                    \\\n                \\\n            case value_t::string:                                                                        \\\n                return (*lhs.m_data.m_value.string) op (*rhs.m_data.m_value.string);                                   \\\n                \\\n            case value_t::boolean:                                                                       \\\n                return (lhs.m_data.m_value.boolean) op (rhs.m_data.m_value.boolean);                                   \\\n                \\\n            case value_t::number_integer:                                                                \\\n                return (lhs.m_data.m_value.number_integer) op (rhs.m_data.m_value.number_integer);                     \\\n                \\\n            case value_t::number_unsigned:                                                               \\\n                return (lhs.m_data.m_value.number_unsigned) op (rhs.m_data.m_value.number_unsigned);                   \\\n                \\\n            case value_t::number_float:                                                                  \\\n                return (lhs.m_data.m_value.number_float) op (rhs.m_data.m_value.number_float);                         \\\n                \\\n            case value_t::binary:                                                                        \\\n                return (*lhs.m_data.m_value.binary) op (*rhs.m_data.m_value.binary);                                   \\\n                \\\n            case value_t::discarded:                                                                     \\\n            default:                                                                                     \\\n                return (unordered_result);                                                               \\\n        }                                                                                                \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float)                   \\\n    {                                                                                                    \\\n        return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float;      \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer)                   \\\n    {                                                                                                    \\\n        return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer);      \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float)                  \\\n    {                                                                                                    \\\n        return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float;     \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned)                  \\\n    {                                                                                                    \\\n        return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned);     \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer)                \\\n    {                                                                                                    \\\n        return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \\\n    }                                                                                                    \\\n    else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned)                \\\n    {                                                                                                    \\\n        return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \\\n    }                                                                                                    \\\n    else if(compares_unordered(lhs, rhs))\\\n    {\\\n        return (unordered_result);\\\n    }\\\n    \\\n    return (default_result);\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    // returns true if:\n    // - any operand is NaN and the other operand is of number type\n    // - any operand is discarded\n    // in legacy mode, discarded values are considered ordered if\n    // an operation is computed as an odd number of inverses of others\n    static bool compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept\n    {\n        if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number())\n                || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))\n        {\n            return true;\n        }\n#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON\n        return (lhs.is_discarded() || rhs.is_discarded()) && !inverse;\n#else\n        static_cast<void>(inverse);\n        return lhs.is_discarded() || rhs.is_discarded();\n#endif\n    }\n\n  private:\n    bool compares_unordered(const_reference rhs, bool inverse = false) const noexcept\n    {\n        return compares_unordered(*this, rhs, inverse);\n    }\n\n  public:\n#if JSON_HAS_THREE_WAY_COMPARISON\n    /// @brief comparison: equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/\n    bool operator==(const_reference rhs) const noexcept\n    {\n#ifdef __GNUC__\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wfloat-equal\"\n#endif\n        const_reference lhs = *this;\n        JSON_IMPLEMENT_OPERATOR( ==, true, false, false)\n#ifdef __GNUC__\n#pragma GCC diagnostic pop\n#endif\n    }\n\n    /// @brief comparison: equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/\n    template<typename ScalarType>\n    requires std::is_scalar_v<ScalarType>\n    bool operator==(ScalarType rhs) const noexcept\n    {\n        return *this == basic_json(rhs);\n    }\n\n    /// @brief comparison: not equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/\n    bool operator!=(const_reference rhs) const noexcept\n    {\n        if (compares_unordered(rhs, true))\n        {\n            return false;\n        }\n        return !operator==(rhs);\n    }\n\n    /// @brief comparison: 3-way\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept // *NOPAD*\n    {\n        const_reference lhs = *this;\n        // default_result is used if we cannot compare values. In that case,\n        // we compare types.\n        JSON_IMPLEMENT_OPERATOR(<=>, // *NOPAD*\n                                std::partial_ordering::equivalent,\n                                std::partial_ordering::unordered,\n                                lhs_type <=> rhs_type) // *NOPAD*\n    }\n\n    /// @brief comparison: 3-way\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/\n    template<typename ScalarType>\n    requires std::is_scalar_v<ScalarType>\n    std::partial_ordering operator<=>(ScalarType rhs) const noexcept // *NOPAD*\n    {\n        return *this <=> basic_json(rhs); // *NOPAD*\n    }\n\n#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON\n    // all operators that are computed as an odd number of inverses of others\n    // need to be overloaded to emulate the legacy comparison behavior\n\n    /// @brief comparison: less than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_le/\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)\n    bool operator<=(const_reference rhs) const noexcept\n    {\n        if (compares_unordered(rhs, true))\n        {\n            return false;\n        }\n        return !(rhs < *this);\n    }\n\n    /// @brief comparison: less than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_le/\n    template<typename ScalarType>\n    requires std::is_scalar_v<ScalarType>\n    bool operator<=(ScalarType rhs) const noexcept\n    {\n        return *this <= basic_json(rhs);\n    }\n\n    /// @brief comparison: greater than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)\n    bool operator>=(const_reference rhs) const noexcept\n    {\n        if (compares_unordered(rhs, true))\n        {\n            return false;\n        }\n        return !(*this < rhs);\n    }\n\n    /// @brief comparison: greater than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/\n    template<typename ScalarType>\n    requires std::is_scalar_v<ScalarType>\n    bool operator>=(ScalarType rhs) const noexcept\n    {\n        return *this >= basic_json(rhs);\n    }\n#endif\n#else\n    /// @brief comparison: equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/\n    friend bool operator==(const_reference lhs, const_reference rhs) noexcept\n    {\n#ifdef __GNUC__\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wfloat-equal\"\n#endif\n        JSON_IMPLEMENT_OPERATOR( ==, true, false, false)\n#ifdef __GNUC__\n#pragma GCC diagnostic pop\n#endif\n    }\n\n    /// @brief comparison: equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator==(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs == basic_json(rhs);\n    }\n\n    /// @brief comparison: equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator==(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) == rhs;\n    }\n\n    /// @brief comparison: not equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/\n    friend bool operator!=(const_reference lhs, const_reference rhs) noexcept\n    {\n        if (compares_unordered(lhs, rhs, true))\n        {\n            return false;\n        }\n        return !(lhs == rhs);\n    }\n\n    /// @brief comparison: not equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs != basic_json(rhs);\n    }\n\n    /// @brief comparison: not equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) != rhs;\n    }\n\n    /// @brief comparison: less than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/\n    friend bool operator<(const_reference lhs, const_reference rhs) noexcept\n    {\n        // default_result is used if we cannot compare values. In that case,\n        // we compare types. Note we have to call the operator explicitly,\n        // because MSVC has problems otherwise.\n        JSON_IMPLEMENT_OPERATOR( <, false, false, operator<(lhs_type, rhs_type))\n    }\n\n    /// @brief comparison: less than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator<(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs < basic_json(rhs);\n    }\n\n    /// @brief comparison: less than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator<(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) < rhs;\n    }\n\n    /// @brief comparison: less than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_le/\n    friend bool operator<=(const_reference lhs, const_reference rhs) noexcept\n    {\n        if (compares_unordered(lhs, rhs, true))\n        {\n            return false;\n        }\n        return !(rhs < lhs);\n    }\n\n    /// @brief comparison: less than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_le/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs <= basic_json(rhs);\n    }\n\n    /// @brief comparison: less than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_le/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) <= rhs;\n    }\n\n    /// @brief comparison: greater than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/\n    friend bool operator>(const_reference lhs, const_reference rhs) noexcept\n    {\n        // double inverse\n        if (compares_unordered(lhs, rhs))\n        {\n            return false;\n        }\n        return !(lhs <= rhs);\n    }\n\n    /// @brief comparison: greater than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator>(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs > basic_json(rhs);\n    }\n\n    /// @brief comparison: greater than\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator>(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) > rhs;\n    }\n\n    /// @brief comparison: greater than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/\n    friend bool operator>=(const_reference lhs, const_reference rhs) noexcept\n    {\n        if (compares_unordered(lhs, rhs, true))\n        {\n            return false;\n        }\n        return !(lhs < rhs);\n    }\n\n    /// @brief comparison: greater than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept\n    {\n        return lhs >= basic_json(rhs);\n    }\n\n    /// @brief comparison: greater than or equal\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/\n    template<typename ScalarType, typename std::enable_if<\n                 std::is_scalar<ScalarType>::value, int>::type = 0>\n    friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept\n    {\n        return basic_json(lhs) >= rhs;\n    }\n#endif\n\n#undef JSON_IMPLEMENT_OPERATOR\n\n    /// @}\n\n    ///////////////////\n    // serialization //\n    ///////////////////\n\n    /// @name serialization\n    /// @{\n#ifndef JSON_NO_IO\n    /// @brief serialize to stream\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/\n    friend std::ostream& operator<<(std::ostream& o, const basic_json& j)\n    {\n        // read width member and use it as indentation parameter if nonzero\n        const bool pretty_print = o.width() > 0;\n        const auto indentation = pretty_print ? o.width() : 0;\n\n        // reset width to 0 for subsequent calls to this stream\n        o.width(0);\n\n        // do the actual serialization\n        serializer s(detail::output_adapter<char>(o), o.fill());\n        s.dump(j, pretty_print, false, static_cast<unsigned int>(indentation));\n        return o;\n    }\n\n    /// @brief serialize to stream\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/\n    /// @deprecated This function is deprecated since 3.0.0 and will be removed in\n    ///             version 4.0.0 of the library. Please use\n    ///             operator<<(std::ostream&, const basic_json&) instead; that is,\n    ///             replace calls like `j >> o;` with `o << j;`.\n    JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&))\n    friend std::ostream& operator>>(const basic_json& j, std::ostream& o)\n    {\n        return o << j;\n    }\n#endif  // JSON_NO_IO\n    /// @}\n\n    /////////////////////\n    // deserialization //\n    /////////////////////\n\n    /// @name deserialization\n    /// @{\n\n    /// @brief deserialize from a compatible input\n    /// @sa https://json.nlohmann.me/api/basic_json/parse/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json parse(InputType&& i,\n                            const parser_callback_t cb = nullptr,\n                            const bool allow_exceptions = true,\n                            const bool ignore_comments = false)\n    {\n        basic_json result;\n        parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);\n        return result;\n    }\n\n    /// @brief deserialize from a pair of character iterators\n    /// @sa https://json.nlohmann.me/api/basic_json/parse/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json parse(IteratorType first,\n                            IteratorType last,\n                            const parser_callback_t cb = nullptr,\n                            const bool allow_exceptions = true,\n                            const bool ignore_comments = false)\n    {\n        basic_json result;\n        parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result);\n        return result;\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len))\n    static basic_json parse(detail::span_input_adapter&& i,\n                            const parser_callback_t cb = nullptr,\n                            const bool allow_exceptions = true,\n                            const bool ignore_comments = false)\n    {\n        basic_json result;\n        parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result);\n        return result;\n    }\n\n    /// @brief check if the input is valid JSON\n    /// @sa https://json.nlohmann.me/api/basic_json/accept/\n    template<typename InputType>\n    static bool accept(InputType&& i,\n                       const bool ignore_comments = false)\n    {\n        return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true);\n    }\n\n    /// @brief check if the input is valid JSON\n    /// @sa https://json.nlohmann.me/api/basic_json/accept/\n    template<typename IteratorType>\n    static bool accept(IteratorType first, IteratorType last,\n                       const bool ignore_comments = false)\n    {\n        return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true);\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len))\n    static bool accept(detail::span_input_adapter&& i,\n                       const bool ignore_comments = false)\n    {\n        return parser(i.get(), nullptr, false, ignore_comments).accept(true);\n    }\n\n    /// @brief generate SAX events\n    /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/\n    template <typename InputType, typename SAX>\n    JSON_HEDLEY_NON_NULL(2)\n    static bool sax_parse(InputType&& i, SAX* sax,\n                          input_format_t format = input_format_t::json,\n                          const bool strict = true,\n                          const bool ignore_comments = false)\n    {\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        return format == input_format_t::json\n               ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)\n               : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);\n    }\n\n    /// @brief generate SAX events\n    /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/\n    template<class IteratorType, class SAX>\n    JSON_HEDLEY_NON_NULL(3)\n    static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,\n                          input_format_t format = input_format_t::json,\n                          const bool strict = true,\n                          const bool ignore_comments = false)\n    {\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        return format == input_format_t::json\n               ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)\n               : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);\n    }\n\n    /// @brief generate SAX events\n    /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/\n    /// @deprecated This function is deprecated since 3.8.0 and will be removed in\n    ///             version 4.0.0 of the library. Please use\n    ///             sax_parse(ptr, ptr + len) instead.\n    template <typename SAX>\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...))\n    JSON_HEDLEY_NON_NULL(2)\n    static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,\n                          input_format_t format = input_format_t::json,\n                          const bool strict = true,\n                          const bool ignore_comments = false)\n    {\n        auto ia = i.get();\n        return format == input_format_t::json\n               // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n               ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)\n               // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n               : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);\n    }\n#ifndef JSON_NO_IO\n    /// @brief deserialize from stream\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/\n    /// @deprecated This stream operator is deprecated since 3.0.0 and will be removed in\n    ///             version 4.0.0 of the library. Please use\n    ///             operator>>(std::istream&, basic_json&) instead; that is,\n    ///             replace calls like `j << i;` with `i >> j;`.\n    JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&))\n    friend std::istream& operator<<(basic_json& j, std::istream& i)\n    {\n        return operator>>(i, j);\n    }\n\n    /// @brief deserialize from stream\n    /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/\n    friend std::istream& operator>>(std::istream& i, basic_json& j)\n    {\n        parser(detail::input_adapter(i)).parse(false, j);\n        return i;\n    }\n#endif  // JSON_NO_IO\n    /// @}\n\n    ///////////////////////////\n    // convenience functions //\n    ///////////////////////////\n\n    /// @brief return the type as string\n    /// @sa https://json.nlohmann.me/api/basic_json/type_name/\n    JSON_HEDLEY_RETURNS_NON_NULL\n    const char* type_name() const noexcept\n    {\n        switch (m_data.m_type)\n        {\n            case value_t::null:\n                return \"null\";\n            case value_t::object:\n                return \"object\";\n            case value_t::array:\n                return \"array\";\n            case value_t::string:\n                return \"string\";\n            case value_t::boolean:\n                return \"boolean\";\n            case value_t::binary:\n                return \"binary\";\n            case value_t::discarded:\n                return \"discarded\";\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            default:\n                return \"number\";\n        }\n    }\n\n  JSON_PRIVATE_UNLESS_TESTED:\n    //////////////////////\n    // member variables //\n    //////////////////////\n\n    struct data\n    {\n        /// the type of the current element\n        value_t m_type = value_t::null;\n\n        /// the value of the current element\n        json_value m_value = {};\n\n        data(const value_t v)\n            : m_type(v), m_value(v)\n        {\n        }\n\n        data(size_type cnt, const basic_json& val)\n            : m_type(value_t::array)\n        {\n            m_value.array = create<array_t>(cnt, val);\n        }\n\n        data() noexcept = default;\n        data(data&&) noexcept = default;\n        data(const data&) noexcept = delete;\n        data& operator=(data&&) noexcept = delete;\n        data& operator=(const data&) noexcept = delete;\n\n        ~data() noexcept\n        {\n            m_value.destroy(m_type);\n        }\n    };\n\n    data m_data = {};\n\n#if JSON_DIAGNOSTICS\n    /// a pointer to a parent value (for debugging purposes)\n    basic_json* m_parent = nullptr;\n#endif\n\n    //////////////////////////////////////////\n    // binary serialization/deserialization //\n    //////////////////////////////////////////\n\n    /// @name binary serialization/deserialization support\n    /// @{\n\n  public:\n    /// @brief create a CBOR serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/\n    static std::vector<std::uint8_t> to_cbor(const basic_json& j)\n    {\n        std::vector<std::uint8_t> result;\n        to_cbor(j, result);\n        return result;\n    }\n\n    /// @brief create a CBOR serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/\n    static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o)\n    {\n        binary_writer<std::uint8_t>(o).write_cbor(j);\n    }\n\n    /// @brief create a CBOR serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/\n    static void to_cbor(const basic_json& j, detail::output_adapter<char> o)\n    {\n        binary_writer<char>(o).write_cbor(j);\n    }\n\n    /// @brief create a MessagePack serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/\n    static std::vector<std::uint8_t> to_msgpack(const basic_json& j)\n    {\n        std::vector<std::uint8_t> result;\n        to_msgpack(j, result);\n        return result;\n    }\n\n    /// @brief create a MessagePack serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/\n    static void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o)\n    {\n        binary_writer<std::uint8_t>(o).write_msgpack(j);\n    }\n\n    /// @brief create a MessagePack serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/\n    static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)\n    {\n        binary_writer<char>(o).write_msgpack(j);\n    }\n\n    /// @brief create a UBJSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/\n    static std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n            const bool use_size = false,\n            const bool use_type = false)\n    {\n        std::vector<std::uint8_t> result;\n        to_ubjson(j, result, use_size, use_type);\n        return result;\n    }\n\n    /// @brief create a UBJSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/\n    static void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                          const bool use_size = false, const bool use_type = false)\n    {\n        binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type);\n    }\n\n    /// @brief create a UBJSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/\n    static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                          const bool use_size = false, const bool use_type = false)\n    {\n        binary_writer<char>(o).write_ubjson(j, use_size, use_type);\n    }\n\n    /// @brief create a BJData serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/\n    static std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n            const bool use_size = false,\n            const bool use_type = false)\n    {\n        std::vector<std::uint8_t> result;\n        to_bjdata(j, result, use_size, use_type);\n        return result;\n    }\n\n    /// @brief create a BJData serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/\n    static void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                          const bool use_size = false, const bool use_type = false)\n    {\n        binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type, true, true);\n    }\n\n    /// @brief create a BJData serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/\n    static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                          const bool use_size = false, const bool use_type = false)\n    {\n        binary_writer<char>(o).write_ubjson(j, use_size, use_type, true, true);\n    }\n\n    /// @brief create a BSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bson/\n    static std::vector<std::uint8_t> to_bson(const basic_json& j)\n    {\n        std::vector<std::uint8_t> result;\n        to_bson(j, result);\n        return result;\n    }\n\n    /// @brief create a BSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bson/\n    static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o)\n    {\n        binary_writer<std::uint8_t>(o).write_bson(j);\n    }\n\n    /// @brief create a BSON serialization of a given JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/to_bson/\n    static void to_bson(const basic_json& j, detail::output_adapter<char> o)\n    {\n        binary_writer<char>(o).write_bson(j);\n    }\n\n    /// @brief create a JSON value from an input in CBOR format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_cbor(InputType&& i,\n                                const bool strict = true,\n                                const bool allow_exceptions = true,\n                                const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in CBOR format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_cbor(IteratorType first, IteratorType last,\n                                const bool strict = true,\n                                const bool allow_exceptions = true,\n                                const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    template<typename T>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))\n    static basic_json from_cbor(const T* ptr, std::size_t len,\n                                const bool strict = true,\n                                const bool allow_exceptions = true,\n                                const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)\n    {\n        return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))\n    static basic_json from_cbor(detail::span_input_adapter&& i,\n                                const bool strict = true,\n                                const bool allow_exceptions = true,\n                                const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = i.get();\n        // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in MessagePack format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_msgpack(InputType&& i,\n                                   const bool strict = true,\n                                   const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in MessagePack format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_msgpack(IteratorType first, IteratorType last,\n                                   const bool strict = true,\n                                   const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    template<typename T>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))\n    static basic_json from_msgpack(const T* ptr, std::size_t len,\n                                   const bool strict = true,\n                                   const bool allow_exceptions = true)\n    {\n        return from_msgpack(ptr, ptr + len, strict, allow_exceptions);\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))\n    static basic_json from_msgpack(detail::span_input_adapter&& i,\n                                   const bool strict = true,\n                                   const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = i.get();\n        // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in UBJSON format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_ubjson(InputType&& i,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in UBJSON format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_ubjson(IteratorType first, IteratorType last,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    template<typename T>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))\n    static basic_json from_ubjson(const T* ptr, std::size_t len,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        return from_ubjson(ptr, ptr + len, strict, allow_exceptions);\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))\n    static basic_json from_ubjson(detail::span_input_adapter&& i,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = i.get();\n        // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in BJData format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_bjdata(InputType&& i,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in BJData format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_bjdata(IteratorType first, IteratorType last,\n                                  const bool strict = true,\n                                  const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in BSON format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_bson/\n    template<typename InputType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_bson(InputType&& i,\n                                const bool strict = true,\n                                const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::forward<InputType>(i));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    /// @brief create a JSON value from an input in BSON format\n    /// @sa https://json.nlohmann.me/api/basic_json/from_bson/\n    template<typename IteratorType>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json from_bson(IteratorType first, IteratorType last,\n                                const bool strict = true,\n                                const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = detail::input_adapter(std::move(first), std::move(last));\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n\n    template<typename T>\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))\n    static basic_json from_bson(const T* ptr, std::size_t len,\n                                const bool strict = true,\n                                const bool allow_exceptions = true)\n    {\n        return from_bson(ptr, ptr + len, strict, allow_exceptions);\n    }\n\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))\n    static basic_json from_bson(detail::span_input_adapter&& i,\n                                const bool strict = true,\n                                const bool allow_exceptions = true)\n    {\n        basic_json result;\n        detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);\n        auto ia = i.get();\n        // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)\n        const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);\n        return res ? result : basic_json(value_t::discarded);\n    }\n    /// @}\n\n    //////////////////////////\n    // JSON Pointer support //\n    //////////////////////////\n\n    /// @name JSON Pointer functions\n    /// @{\n\n    /// @brief access specified element via JSON Pointer\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    reference operator[](const json_pointer& ptr)\n    {\n        return ptr.get_unchecked(this);\n    }\n\n    template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)\n    {\n        return ptr.get_unchecked(this);\n    }\n\n    /// @brief access specified element via JSON Pointer\n    /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/\n    const_reference operator[](const json_pointer& ptr) const\n    {\n        return ptr.get_unchecked(this);\n    }\n\n    template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr) const\n    {\n        return ptr.get_unchecked(this);\n    }\n\n    /// @brief access specified element via JSON Pointer\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    reference at(const json_pointer& ptr)\n    {\n        return ptr.get_checked(this);\n    }\n\n    template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)\n    {\n        return ptr.get_checked(this);\n    }\n\n    /// @brief access specified element via JSON Pointer\n    /// @sa https://json.nlohmann.me/api/basic_json/at/\n    const_reference at(const json_pointer& ptr) const\n    {\n        return ptr.get_checked(this);\n    }\n\n    template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>\n    JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)\n    const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) const\n    {\n        return ptr.get_checked(this);\n    }\n\n    /// @brief return flattened JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/flatten/\n    basic_json flatten() const\n    {\n        basic_json result(value_t::object);\n        json_pointer::flatten(\"\", *this, result);\n        return result;\n    }\n\n    /// @brief unflatten a previously flattened JSON value\n    /// @sa https://json.nlohmann.me/api/basic_json/unflatten/\n    basic_json unflatten() const\n    {\n        return json_pointer::unflatten(*this);\n    }\n\n    /// @}\n\n    //////////////////////////\n    // JSON Patch functions //\n    //////////////////////////\n\n    /// @name JSON Patch functions\n    /// @{\n\n    /// @brief applies a JSON patch in-place without copying the object\n    /// @sa https://json.nlohmann.me/api/basic_json/patch/\n    void patch_inplace(const basic_json& json_patch)\n    {\n        basic_json& result = *this;\n        // the valid JSON Patch operations\n        enum class patch_operations {add, remove, replace, move, copy, test, invalid};\n\n        const auto get_op = [](const std::string & op)\n        {\n            if (op == \"add\")\n            {\n                return patch_operations::add;\n            }\n            if (op == \"remove\")\n            {\n                return patch_operations::remove;\n            }\n            if (op == \"replace\")\n            {\n                return patch_operations::replace;\n            }\n            if (op == \"move\")\n            {\n                return patch_operations::move;\n            }\n            if (op == \"copy\")\n            {\n                return patch_operations::copy;\n            }\n            if (op == \"test\")\n            {\n                return patch_operations::test;\n            }\n\n            return patch_operations::invalid;\n        };\n\n        // wrapper for \"add\" operation; add value at ptr\n        const auto operation_add = [&result](json_pointer & ptr, basic_json val)\n        {\n            // adding to the root of the target document means replacing it\n            if (ptr.empty())\n            {\n                result = val;\n                return;\n            }\n\n            // make sure the top element of the pointer exists\n            json_pointer const top_pointer = ptr.top();\n            if (top_pointer != ptr)\n            {\n                result.at(top_pointer);\n            }\n\n            // get reference to parent of JSON pointer ptr\n            const auto last_path = ptr.back();\n            ptr.pop_back();\n            // parent must exist when performing patch add per RFC6902 specs\n            basic_json& parent = result.at(ptr);\n\n            switch (parent.m_data.m_type)\n            {\n                case value_t::null:\n                case value_t::object:\n                {\n                    // use operator[] to add value\n                    parent[last_path] = val;\n                    break;\n                }\n\n                case value_t::array:\n                {\n                    if (last_path == \"-\")\n                    {\n                        // special case: append to back\n                        parent.push_back(val);\n                    }\n                    else\n                    {\n                        const auto idx = json_pointer::template array_index<basic_json_t>(last_path);\n                        if (JSON_HEDLEY_UNLIKELY(idx > parent.size()))\n                        {\n                            // avoid undefined behavior\n                            JSON_THROW(out_of_range::create(401, detail::concat(\"array index \", std::to_string(idx), \" is out of range\"), &parent));\n                        }\n\n                        // default case: insert add offset\n                        parent.insert(parent.begin() + static_cast<difference_type>(idx), val);\n                    }\n                    break;\n                }\n\n                // if there exists a parent it cannot be primitive\n                case value_t::string: // LCOV_EXCL_LINE\n                case value_t::boolean: // LCOV_EXCL_LINE\n                case value_t::number_integer: // LCOV_EXCL_LINE\n                case value_t::number_unsigned: // LCOV_EXCL_LINE\n                case value_t::number_float: // LCOV_EXCL_LINE\n                case value_t::binary: // LCOV_EXCL_LINE\n                case value_t::discarded: // LCOV_EXCL_LINE\n                default:            // LCOV_EXCL_LINE\n                    JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE\n            }\n        };\n\n        // wrapper for \"remove\" operation; remove value at ptr\n        const auto operation_remove = [this, & result](json_pointer & ptr)\n        {\n            // get reference to parent of JSON pointer ptr\n            const auto last_path = ptr.back();\n            ptr.pop_back();\n            basic_json& parent = result.at(ptr);\n\n            // remove child\n            if (parent.is_object())\n            {\n                // perform range check\n                auto it = parent.find(last_path);\n                if (JSON_HEDLEY_LIKELY(it != parent.end()))\n                {\n                    parent.erase(it);\n                }\n                else\n                {\n                    JSON_THROW(out_of_range::create(403, detail::concat(\"key '\", last_path, \"' not found\"), this));\n                }\n            }\n            else if (parent.is_array())\n            {\n                // note erase performs range check\n                parent.erase(json_pointer::template array_index<basic_json_t>(last_path));\n            }\n        };\n\n        // type check: top level value must be an array\n        if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array()))\n        {\n            JSON_THROW(parse_error::create(104, 0, \"JSON patch must be an array of objects\", &json_patch));\n        }\n\n        // iterate and apply the operations\n        for (const auto& val : json_patch)\n        {\n            // wrapper to get a value for an operation\n            const auto get_value = [&val](const std::string & op,\n                                          const std::string & member,\n                                          bool string_type) -> basic_json &\n            {\n                // find value\n                auto it = val.m_data.m_value.object->find(member);\n\n                // context-sensitive error message\n                const auto error_msg = (op == \"op\") ? \"operation\" : detail::concat(\"operation '\", op, '\\'');\n\n                // check if desired value is present\n                if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))\n                {\n                    // NOLINTNEXTLINE(performance-inefficient-string-concatenation)\n                    JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, \" must have member '\", member, \"'\"), &val));\n                }\n\n                // check if result is of type string\n                if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string()))\n                {\n                    // NOLINTNEXTLINE(performance-inefficient-string-concatenation)\n                    JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, \" must have string member '\", member, \"'\"), &val));\n                }\n\n                // no error: return value\n                return it->second;\n            };\n\n            // type check: every element of the array must be an object\n            if (JSON_HEDLEY_UNLIKELY(!val.is_object()))\n            {\n                JSON_THROW(parse_error::create(104, 0, \"JSON patch must be an array of objects\", &val));\n            }\n\n            // collect mandatory members\n            const auto op = get_value(\"op\", \"op\", true).template get<std::string>();\n            const auto path = get_value(op, \"path\", true).template get<std::string>();\n            json_pointer ptr(path);\n\n            switch (get_op(op))\n            {\n                case patch_operations::add:\n                {\n                    operation_add(ptr, get_value(\"add\", \"value\", false));\n                    break;\n                }\n\n                case patch_operations::remove:\n                {\n                    operation_remove(ptr);\n                    break;\n                }\n\n                case patch_operations::replace:\n                {\n                    // the \"path\" location must exist - use at()\n                    result.at(ptr) = get_value(\"replace\", \"value\", false);\n                    break;\n                }\n\n                case patch_operations::move:\n                {\n                    const auto from_path = get_value(\"move\", \"from\", true).template get<std::string>();\n                    json_pointer from_ptr(from_path);\n\n                    // the \"from\" location must exist - use at()\n                    basic_json const v = result.at(from_ptr);\n\n                    // The move operation is functionally identical to a\n                    // \"remove\" operation on the \"from\" location, followed\n                    // immediately by an \"add\" operation at the target\n                    // location with the value that was just removed.\n                    operation_remove(from_ptr);\n                    operation_add(ptr, v);\n                    break;\n                }\n\n                case patch_operations::copy:\n                {\n                    const auto from_path = get_value(\"copy\", \"from\", true).template get<std::string>();\n                    const json_pointer from_ptr(from_path);\n\n                    // the \"from\" location must exist - use at()\n                    basic_json const v = result.at(from_ptr);\n\n                    // The copy is functionally identical to an \"add\"\n                    // operation at the target location using the value\n                    // specified in the \"from\" member.\n                    operation_add(ptr, v);\n                    break;\n                }\n\n                case patch_operations::test:\n                {\n                    bool success = false;\n                    JSON_TRY\n                    {\n                        // check if \"value\" matches the one at \"path\"\n                        // the \"path\" location must exist - use at()\n                        success = (result.at(ptr) == get_value(\"test\", \"value\", false));\n                    }\n                    JSON_INTERNAL_CATCH (out_of_range&)\n                    {\n                        // ignore out of range errors: success remains false\n                    }\n\n                    // throw an exception if test fails\n                    if (JSON_HEDLEY_UNLIKELY(!success))\n                    {\n                        JSON_THROW(other_error::create(501, detail::concat(\"unsuccessful: \", val.dump()), &val));\n                    }\n\n                    break;\n                }\n\n                case patch_operations::invalid:\n                default:\n                {\n                    // op must be \"add\", \"remove\", \"replace\", \"move\", \"copy\", or\n                    // \"test\"\n                    JSON_THROW(parse_error::create(105, 0, detail::concat(\"operation value '\", op, \"' is invalid\"), &val));\n                }\n            }\n        }\n    }\n\n    /// @brief applies a JSON patch to a copy of the current object\n    /// @sa https://json.nlohmann.me/api/basic_json/patch/\n    basic_json patch(const basic_json& json_patch) const\n    {\n        basic_json result = *this;\n        result.patch_inplace(json_patch);\n        return result;\n    }\n\n    /// @brief creates a diff as a JSON patch\n    /// @sa https://json.nlohmann.me/api/basic_json/diff/\n    JSON_HEDLEY_WARN_UNUSED_RESULT\n    static basic_json diff(const basic_json& source, const basic_json& target,\n                           const std::string& path = \"\")\n    {\n        // the patch\n        basic_json result(value_t::array);\n\n        // if the values are the same, return empty patch\n        if (source == target)\n        {\n            return result;\n        }\n\n        if (source.type() != target.type())\n        {\n            // different types: replace value\n            result.push_back(\n            {\n                {\"op\", \"replace\"}, {\"path\", path}, {\"value\", target}\n            });\n            return result;\n        }\n\n        switch (source.type())\n        {\n            case value_t::array:\n            {\n                // first pass: traverse common elements\n                std::size_t i = 0;\n                while (i < source.size() && i < target.size())\n                {\n                    // recursive call to compare array values at index i\n                    auto temp_diff = diff(source[i], target[i], detail::concat(path, '/', std::to_string(i)));\n                    result.insert(result.end(), temp_diff.begin(), temp_diff.end());\n                    ++i;\n                }\n\n                // We now reached the end of at least one array\n                // in a second pass, traverse the remaining elements\n\n                // remove my remaining elements\n                const auto end_index = static_cast<difference_type>(result.size());\n                while (i < source.size())\n                {\n                    // add operations in reverse order to avoid invalid\n                    // indices\n                    result.insert(result.begin() + end_index, object(\n                    {\n                        {\"op\", \"remove\"},\n                        {\"path\", detail::concat(path, '/', std::to_string(i))}\n                    }));\n                    ++i;\n                }\n\n                // add other remaining elements\n                while (i < target.size())\n                {\n                    result.push_back(\n                    {\n                        {\"op\", \"add\"},\n                        {\"path\", detail::concat(path, \"/-\")},\n                        {\"value\", target[i]}\n                    });\n                    ++i;\n                }\n\n                break;\n            }\n\n            case value_t::object:\n            {\n                // first pass: traverse this object's elements\n                for (auto it = source.cbegin(); it != source.cend(); ++it)\n                {\n                    // escape the key name to be used in a JSON patch\n                    const auto path_key = detail::concat(path, '/', detail::escape(it.key()));\n\n                    if (target.find(it.key()) != target.end())\n                    {\n                        // recursive call to compare object values at key it\n                        auto temp_diff = diff(it.value(), target[it.key()], path_key);\n                        result.insert(result.end(), temp_diff.begin(), temp_diff.end());\n                    }\n                    else\n                    {\n                        // found a key that is not in o -> remove it\n                        result.push_back(object(\n                        {\n                            {\"op\", \"remove\"}, {\"path\", path_key}\n                        }));\n                    }\n                }\n\n                // second pass: traverse other object's elements\n                for (auto it = target.cbegin(); it != target.cend(); ++it)\n                {\n                    if (source.find(it.key()) == source.end())\n                    {\n                        // found a key that is not in this -> add it\n                        const auto path_key = detail::concat(path, '/', detail::escape(it.key()));\n                        result.push_back(\n                        {\n                            {\"op\", \"add\"}, {\"path\", path_key},\n                            {\"value\", it.value()}\n                        });\n                    }\n                }\n\n                break;\n            }\n\n            case value_t::null:\n            case value_t::string:\n            case value_t::boolean:\n            case value_t::number_integer:\n            case value_t::number_unsigned:\n            case value_t::number_float:\n            case value_t::binary:\n            case value_t::discarded:\n            default:\n            {\n                // both primitive type: replace value\n                result.push_back(\n                {\n                    {\"op\", \"replace\"}, {\"path\", path}, {\"value\", target}\n                });\n                break;\n            }\n        }\n\n        return result;\n    }\n    /// @}\n\n    ////////////////////////////////\n    // JSON Merge Patch functions //\n    ////////////////////////////////\n\n    /// @name JSON Merge Patch functions\n    /// @{\n\n    /// @brief applies a JSON Merge Patch\n    /// @sa https://json.nlohmann.me/api/basic_json/merge_patch/\n    void merge_patch(const basic_json& apply_patch)\n    {\n        if (apply_patch.is_object())\n        {\n            if (!is_object())\n            {\n                *this = object();\n            }\n            for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it)\n            {\n                if (it.value().is_null())\n                {\n                    erase(it.key());\n                }\n                else\n                {\n                    operator[](it.key()).merge_patch(it.value());\n                }\n            }\n        }\n        else\n        {\n            *this = apply_patch;\n        }\n    }\n\n    /// @}\n};\n\n/// @brief user-defined to_string function for JSON values\n/// @sa https://json.nlohmann.me/api/basic_json/to_string/\nNLOHMANN_BASIC_JSON_TPL_DECLARATION\nstd::string to_string(const NLOHMANN_BASIC_JSON_TPL& j)\n{\n    return j.dump();\n}\n\ninline namespace literals\n{\ninline namespace json_literals\n{\n\n/// @brief user-defined string literal for JSON values\n/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/\nJSON_HEDLEY_NON_NULL(1)\n#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)\n    inline nlohmann::json operator \"\"_json(const char* s, std::size_t n)\n#else\n    inline nlohmann::json operator \"\" _json(const char* s, std::size_t n)\n#endif\n{\n    return nlohmann::json::parse(s, s + n);\n}\n\n/// @brief user-defined string literal for JSON pointer\n/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/\nJSON_HEDLEY_NON_NULL(1)\n#if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)\n    inline nlohmann::json::json_pointer operator \"\"_json_pointer(const char* s, std::size_t n)\n#else\n    inline nlohmann::json::json_pointer operator \"\" _json_pointer(const char* s, std::size_t n)\n#endif\n{\n    return nlohmann::json::json_pointer(std::string(s, n));\n}\n\n}  // namespace json_literals\n}  // namespace literals\nNLOHMANN_JSON_NAMESPACE_END\n\n///////////////////////\n// nonmember support //\n///////////////////////\n\nnamespace std // NOLINT(cert-dcl58-cpp)\n{\n\n/// @brief hash value for JSON objects\n/// @sa https://json.nlohmann.me/api/basic_json/std_hash/\nNLOHMANN_BASIC_JSON_TPL_DECLARATION\nstruct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL> // NOLINT(cert-dcl58-cpp)\n{\n    std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const\n    {\n        return nlohmann::detail::hash(j);\n    }\n};\n\n// specialization for std::less<value_t>\ntemplate<>\nstruct less< ::nlohmann::detail::value_t> // do not remove the space after '<', see https://github.com/nlohmann/json/pull/679\n{\n    /*!\n    @brief compare two value_t enum values\n    @since version 3.0.0\n    */\n    bool operator()(::nlohmann::detail::value_t lhs,\n                    ::nlohmann::detail::value_t rhs) const noexcept\n    {\n#if JSON_HAS_THREE_WAY_COMPARISON\n        return std::is_lt(lhs <=> rhs); // *NOPAD*\n#else\n        return ::nlohmann::detail::operator<(lhs, rhs);\n#endif\n    }\n};\n\n// C++20 prohibit function specialization in the std namespace.\n#ifndef JSON_HAS_CPP_20\n\n/// @brief exchanges the values of two JSON objects\n/// @sa https://json.nlohmann.me/api/basic_json/std_swap/\nNLOHMANN_BASIC_JSON_TPL_DECLARATION\ninline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept(  // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)\n    is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&&                          // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)\n    is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)\n{\n    j1.swap(j2);\n}\n\n#endif\n\n}  // namespace std\n\n#if JSON_USE_GLOBAL_UDLS\n    #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)\n        using nlohmann::literals::json_literals::operator \"\"_json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)\n        using nlohmann::literals::json_literals::operator \"\"_json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)\n    #else\n        using nlohmann::literals::json_literals::operator \"\" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)\n        using nlohmann::literals::json_literals::operator \"\" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)\n    #endif\n#endif\n\n// #include <nlohmann/detail/macro_unscope.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n// restore clang diagnostic settings\n#if defined(__clang__)\n    #pragma clang diagnostic pop\n#endif\n\n// clean up\n#undef JSON_ASSERT\n#undef JSON_INTERNAL_CATCH\n#undef JSON_THROW\n#undef JSON_PRIVATE_UNLESS_TESTED\n#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION\n#undef NLOHMANN_BASIC_JSON_TPL\n#undef JSON_EXPLICIT\n#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL\n#undef JSON_INLINE_VARIABLE\n#undef JSON_NO_UNIQUE_ADDRESS\n#undef JSON_DISABLE_ENUM_SERIALIZATION\n#undef JSON_USE_GLOBAL_UDLS\n\n#ifndef JSON_TEST_KEEP_MACROS\n    #undef JSON_CATCH\n    #undef JSON_TRY\n    #undef JSON_HAS_CPP_11\n    #undef JSON_HAS_CPP_14\n    #undef JSON_HAS_CPP_17\n    #undef JSON_HAS_CPP_20\n    #undef JSON_HAS_FILESYSTEM\n    #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM\n    #undef JSON_HAS_THREE_WAY_COMPARISON\n    #undef JSON_HAS_RANGES\n    #undef JSON_HAS_STATIC_RTTI\n    #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON\n#endif\n\n// #include <nlohmann/thirdparty/hedley/hedley_undef.hpp>\n//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11.3\n// |_____|_____|_____|_|___|  https://github.com/nlohmann/json\n//\n// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>\n// SPDX-License-Identifier: MIT\n\n\n\n#undef JSON_HEDLEY_ALWAYS_INLINE\n#undef JSON_HEDLEY_ARM_VERSION\n#undef JSON_HEDLEY_ARM_VERSION_CHECK\n#undef JSON_HEDLEY_ARRAY_PARAM\n#undef JSON_HEDLEY_ASSUME\n#undef JSON_HEDLEY_BEGIN_C_DECLS\n#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE\n#undef JSON_HEDLEY_CLANG_HAS_BUILTIN\n#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE\n#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE\n#undef JSON_HEDLEY_CLANG_HAS_EXTENSION\n#undef JSON_HEDLEY_CLANG_HAS_FEATURE\n#undef JSON_HEDLEY_CLANG_HAS_WARNING\n#undef JSON_HEDLEY_COMPCERT_VERSION\n#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK\n#undef JSON_HEDLEY_CONCAT\n#undef JSON_HEDLEY_CONCAT3\n#undef JSON_HEDLEY_CONCAT3_EX\n#undef JSON_HEDLEY_CONCAT_EX\n#undef JSON_HEDLEY_CONST\n#undef JSON_HEDLEY_CONSTEXPR\n#undef JSON_HEDLEY_CONST_CAST\n#undef JSON_HEDLEY_CPP_CAST\n#undef JSON_HEDLEY_CRAY_VERSION\n#undef JSON_HEDLEY_CRAY_VERSION_CHECK\n#undef JSON_HEDLEY_C_DECL\n#undef JSON_HEDLEY_DEPRECATED\n#undef JSON_HEDLEY_DEPRECATED_FOR\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS\n#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION\n#undef JSON_HEDLEY_DIAGNOSTIC_POP\n#undef JSON_HEDLEY_DIAGNOSTIC_PUSH\n#undef JSON_HEDLEY_DMC_VERSION\n#undef JSON_HEDLEY_DMC_VERSION_CHECK\n#undef JSON_HEDLEY_EMPTY_BASES\n#undef JSON_HEDLEY_EMSCRIPTEN_VERSION\n#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK\n#undef JSON_HEDLEY_END_C_DECLS\n#undef JSON_HEDLEY_FLAGS\n#undef JSON_HEDLEY_FLAGS_CAST\n#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE\n#undef JSON_HEDLEY_GCC_HAS_BUILTIN\n#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE\n#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE\n#undef JSON_HEDLEY_GCC_HAS_EXTENSION\n#undef JSON_HEDLEY_GCC_HAS_FEATURE\n#undef JSON_HEDLEY_GCC_HAS_WARNING\n#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK\n#undef JSON_HEDLEY_GCC_VERSION\n#undef JSON_HEDLEY_GCC_VERSION_CHECK\n#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE\n#undef JSON_HEDLEY_GNUC_HAS_BUILTIN\n#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE\n#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE\n#undef JSON_HEDLEY_GNUC_HAS_EXTENSION\n#undef JSON_HEDLEY_GNUC_HAS_FEATURE\n#undef JSON_HEDLEY_GNUC_HAS_WARNING\n#undef JSON_HEDLEY_GNUC_VERSION\n#undef JSON_HEDLEY_GNUC_VERSION_CHECK\n#undef JSON_HEDLEY_HAS_ATTRIBUTE\n#undef JSON_HEDLEY_HAS_BUILTIN\n#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE\n#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS\n#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE\n#undef JSON_HEDLEY_HAS_EXTENSION\n#undef JSON_HEDLEY_HAS_FEATURE\n#undef JSON_HEDLEY_HAS_WARNING\n#undef JSON_HEDLEY_IAR_VERSION\n#undef JSON_HEDLEY_IAR_VERSION_CHECK\n#undef JSON_HEDLEY_IBM_VERSION\n#undef JSON_HEDLEY_IBM_VERSION_CHECK\n#undef JSON_HEDLEY_IMPORT\n#undef JSON_HEDLEY_INLINE\n#undef JSON_HEDLEY_INTEL_CL_VERSION\n#undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK\n#undef JSON_HEDLEY_INTEL_VERSION\n#undef JSON_HEDLEY_INTEL_VERSION_CHECK\n#undef JSON_HEDLEY_IS_CONSTANT\n#undef JSON_HEDLEY_IS_CONSTEXPR_\n#undef JSON_HEDLEY_LIKELY\n#undef JSON_HEDLEY_MALLOC\n#undef JSON_HEDLEY_MCST_LCC_VERSION\n#undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK\n#undef JSON_HEDLEY_MESSAGE\n#undef JSON_HEDLEY_MSVC_VERSION\n#undef JSON_HEDLEY_MSVC_VERSION_CHECK\n#undef JSON_HEDLEY_NEVER_INLINE\n#undef JSON_HEDLEY_NON_NULL\n#undef JSON_HEDLEY_NO_ESCAPE\n#undef JSON_HEDLEY_NO_RETURN\n#undef JSON_HEDLEY_NO_THROW\n#undef JSON_HEDLEY_NULL\n#undef JSON_HEDLEY_PELLES_VERSION\n#undef JSON_HEDLEY_PELLES_VERSION_CHECK\n#undef JSON_HEDLEY_PGI_VERSION\n#undef JSON_HEDLEY_PGI_VERSION_CHECK\n#undef JSON_HEDLEY_PREDICT\n#undef JSON_HEDLEY_PRINTF_FORMAT\n#undef JSON_HEDLEY_PRIVATE\n#undef JSON_HEDLEY_PUBLIC\n#undef JSON_HEDLEY_PURE\n#undef JSON_HEDLEY_REINTERPRET_CAST\n#undef JSON_HEDLEY_REQUIRE\n#undef JSON_HEDLEY_REQUIRE_CONSTEXPR\n#undef JSON_HEDLEY_REQUIRE_MSG\n#undef JSON_HEDLEY_RESTRICT\n#undef JSON_HEDLEY_RETURNS_NON_NULL\n#undef JSON_HEDLEY_SENTINEL\n#undef JSON_HEDLEY_STATIC_ASSERT\n#undef JSON_HEDLEY_STATIC_CAST\n#undef JSON_HEDLEY_STRINGIFY\n#undef JSON_HEDLEY_STRINGIFY_EX\n#undef JSON_HEDLEY_SUNPRO_VERSION\n#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK\n#undef JSON_HEDLEY_TINYC_VERSION\n#undef JSON_HEDLEY_TINYC_VERSION_CHECK\n#undef JSON_HEDLEY_TI_ARMCL_VERSION\n#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK\n#undef JSON_HEDLEY_TI_CL2000_VERSION\n#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK\n#undef JSON_HEDLEY_TI_CL430_VERSION\n#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK\n#undef JSON_HEDLEY_TI_CL6X_VERSION\n#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK\n#undef JSON_HEDLEY_TI_CL7X_VERSION\n#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK\n#undef JSON_HEDLEY_TI_CLPRU_VERSION\n#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK\n#undef JSON_HEDLEY_TI_VERSION\n#undef JSON_HEDLEY_TI_VERSION_CHECK\n#undef JSON_HEDLEY_UNAVAILABLE\n#undef JSON_HEDLEY_UNLIKELY\n#undef JSON_HEDLEY_UNPREDICTABLE\n#undef JSON_HEDLEY_UNREACHABLE\n#undef JSON_HEDLEY_UNREACHABLE_RETURN\n#undef JSON_HEDLEY_VERSION\n#undef JSON_HEDLEY_VERSION_DECODE_MAJOR\n#undef JSON_HEDLEY_VERSION_DECODE_MINOR\n#undef JSON_HEDLEY_VERSION_DECODE_REVISION\n#undef JSON_HEDLEY_VERSION_ENCODE\n#undef JSON_HEDLEY_WARNING\n#undef JSON_HEDLEY_WARN_UNUSED_RESULT\n#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG\n#undef JSON_HEDLEY_FALL_THROUGH\n\n\n\n#endif  // INCLUDE_NLOHMANN_JSON_HPP_\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"yoga-repo\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\",\n    \"tsc\": \"yarn workspaces run tsc\",\n    \"gentest\": \"yarn workspace gentest run gentest\",\n    \"gentest-validate\": \"yarn workspace gentest run gentest-validate\"\n  },\n  \"workspaces\": [\n    \"javascript\",\n    \"gentest\",\n    \"website\"\n  ],\n  \"devDependencies\": {\n    \"@typescript-eslint/eslint-plugin\": \"^5.30.5\",\n    \"@typescript-eslint/parser\": \"^5.30.5\",\n    \"eslint\": \"^8.30.0\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"eslint-plugin-jest\": \"^27.1.7\",\n    \"eslint-plugin-prettier\": \"^4.2.1\",\n    \"prettier\": \"2.8.8\",\n    \"typescript\": \"5.0.4\"\n  },\n  \"resolutions\": {\n    \"cliui/wrap-ansi\": \"7.0.0\"\n  }\n}\n"
  },
  {
    "path": "set-version.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport re\nimport sys\n\nos.chdir(os.path.dirname(__file__))\n\nif len(sys.argv) != 2:\n    print(\"usage: ./set-version <version>\", file=sys.stderr)\n    sys.exit(1)\n\nversion = sys.argv[1]\n\nwith open(\"gradle.properties\", \"r+\") as f:\n    new_contents = re.sub(r\"VERSION_NAME=.*\", f\"VERSION_NAME={version}\", f.read())\n    f.seek(0)\n    f.truncate()\n    f.write(new_contents)\n\nwith open(\"javascript/package.json\", \"r+\") as f:\n    new_contents = re.sub(r'\"version\": \".*\",', f'\"version\": \"{version}\",', f.read())\n    f.seek(0)\n    f.truncate()\n    f.write(new_contents)\n\nwith open(\"website/package.json\", \"r+\") as f:\n    new_contents = re.sub(\n        r'\"yoga-layout\": \".*\"', f'\"yoga-layout\": \"{version}\"', f.read()\n    )\n    f.seek(0)\n    f.truncate()\n    f.write(new_contents)\n"
  },
  {
    "path": "settings.gradle.kts",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npluginManagement {\n  repositories {\n    gradlePluginPortal()\n    mavenCentral()\n    google()\n  }\n}\n\nplugins { id(\"com.gradle.enterprise\").version(\"3.7.1\") }\n\ninclude(\":yoga\")\n\nproject(\":yoga\").projectDir = file(\"java\")\n\ngradleEnterprise {\n  buildScan {\n    termsOfServiceUrl = \"https://gradle.com/terms-of-service\"\n    termsOfServiceAgree = \"yes\"\n  }\n}\n\nrootProject.name = \"yoga-github\"\n"
  },
  {
    "path": "tests/.clang-tidy",
    "content": "---\nInheritParentConfig: true\nChecks: '\n-facebook-hte-CArray,\n-modernize-avoid-c-arrays,\n'\n...\n"
  },
  {
    "path": "tests/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(tests)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\ninclude(FetchContent)\ninclude(GoogleTest)\n\nset(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)\ninclude(${YOGA_ROOT}/cmake/project-defaults.cmake)\n\n# Fetch GTest\nFetchContent_Declare(\n  googletest\n  URL https://github.com/google/googletest/archive/refs/tags/release-1.12.1.zip\n)\nFetchContent_MakeAvailable(googletest)\n\nadd_subdirectory(${YOGA_ROOT}/yoga ${CMAKE_CURRENT_BINARY_DIR}/yoga)\n\nfile(GLOB SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp\n    ${CMAKE_CURRENT_SOURCE_DIR}/**/*.cpp)\n\nenable_testing()\n\nadd_executable(yogatests ${SOURCES})\ntarget_link_libraries(yogatests yogacore GTest::gtest_main)\n\ngtest_discover_tests(yogatests)\n"
  },
  {
    "path": "tests/EventsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/YGEnums.h>\n#include <yoga/Yoga.h>\n#include <yoga/event/event.h>\n\n#include <algorithm>\n#include <functional>\n#include <memory>\n#include <vector>\n\n#include \"util/TestUtil.h\"\n\nnamespace facebook::yoga::test {\n\ntemplate <Event::Type E>\nstruct TypedEventTestData {};\n\ntemplate <>\nstruct TypedEventTestData<Event::LayoutPassEnd> {\n  LayoutData layoutData;\n};\n\nstruct EventArgs {\n  const YGNodeConstRef node;\n  Event::Type type;\n  std::unique_ptr<void, std::function<void(void*)>> dataPtr;\n  std::unique_ptr<void, std::function<void(void*)>> eventTestDataPtr;\n\n  template <Event::Type E>\n  const Event::TypedData<E>& data() {\n    return *static_cast<Event::TypedData<E>*>(dataPtr.get());\n  }\n\n  template <Event::Type E>\n  const TypedEventTestData<E>& eventTestData() {\n    return *static_cast<TypedEventTestData<E>*>(eventTestDataPtr.get());\n  }\n};\n\nclass EventTest : public ::testing::Test {\n  ScopedEventSubscription subscription{&EventTest::listen};\n  static void listen(\n      YGNodeConstRef /*node*/,\n      Event::Type /*type*/,\n      Event::Data /*data*/);\n\n public:\n  static std::vector<EventArgs> events;\n  static EventArgs& lastEvent() {\n    return events.back();\n  }\n  void TearDown() override;\n};\n\nTEST_F(EventTest, new_node_has_event) {\n  auto c = YGConfigGetDefault();\n  auto n = YGNodeNew();\n\n  ASSERT_EQ(lastEvent().node, n);\n  ASSERT_EQ(lastEvent().type, Event::NodeAllocation);\n  ASSERT_EQ(lastEvent().data<Event::NodeAllocation>().config, c);\n\n  YGNodeFree(n);\n}\n\nTEST_F(EventTest, new_node_with_config_event) {\n  auto c = YGConfigNew();\n  auto n = YGNodeNewWithConfig(c);\n\n  ASSERT_EQ(lastEvent().node, n);\n  ASSERT_EQ(lastEvent().type, Event::NodeAllocation);\n  ASSERT_EQ(lastEvent().data<Event::NodeAllocation>().config, c);\n\n  YGNodeFree(n);\n  YGConfigFree(c);\n}\n\nTEST_F(EventTest, clone_node_event) {\n  auto c = YGConfigNew();\n  auto n = YGNodeNewWithConfig(c);\n  auto clone = YGNodeClone(n);\n\n  ASSERT_EQ(lastEvent().node, clone);\n  ASSERT_EQ(lastEvent().type, Event::NodeAllocation);\n  ASSERT_EQ(lastEvent().data<Event::NodeAllocation>().config, c);\n\n  YGNodeFree(n);\n  YGNodeFree(clone);\n  YGConfigFree(c);\n}\n\nTEST_F(EventTest, free_node_event) {\n  auto c = YGConfigNew();\n  auto n = YGNodeNewWithConfig(c);\n  YGNodeFree(n);\n\n  ASSERT_EQ(lastEvent().node, n);\n  ASSERT_EQ(lastEvent().type, Event::NodeDeallocation);\n  ASSERT_EQ(lastEvent().data<Event::NodeDeallocation>().config, c);\n\n  YGConfigFree(c);\n}\n\nTEST_F(EventTest, layout_events) {\n  auto root = YGNodeNew();\n  auto child = YGNodeNew();\n  YGNodeInsertChild(root, child, 0);\n\n  YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR);\n\n  ASSERT_EQ(events[2].node, root);\n  ASSERT_EQ(events[2].type, Event::LayoutPassStart);\n\n  ASSERT_EQ(events[3].node, child);\n  ASSERT_EQ(events[3].type, Event::NodeLayout);\n\n  ASSERT_EQ(events[4].node, child);\n  ASSERT_EQ(events[4].type, Event::NodeLayout);\n\n  ASSERT_EQ(events[5].node, child);\n  ASSERT_EQ(events[5].type, Event::NodeLayout);\n\n  ASSERT_EQ(events[6].node, root);\n  ASSERT_EQ(events[6].type, Event::NodeLayout);\n\n  ASSERT_EQ(events[7].node, root);\n  ASSERT_EQ(events[7].type, Event::LayoutPassEnd);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST_F(EventTest, layout_events_single_node) {\n  auto root = YGNodeNew();\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(events[1].node, root);\n  ASSERT_EQ(events[1].type, Event::LayoutPassStart);\n\n  ASSERT_EQ(events[2].node, root);\n  ASSERT_EQ(events[2].type, Event::NodeLayout);\n\n  ASSERT_EQ(events[3].node, root);\n  ASSERT_EQ(events[3].type, Event::LayoutPassEnd);\n\n  LayoutData layoutData =\n      events[3].eventTestData<Event::LayoutPassEnd>().layoutData;\n\n  ASSERT_EQ(layoutData.layouts, 1);\n  ASSERT_EQ(layoutData.measures, 0);\n  ASSERT_EQ(layoutData.maxMeasureCache, 1);\n}\n\nTEST_F(EventTest, layout_events_counts_multi_node_layout) {\n  auto root = YGNodeNew();\n  auto childA = YGNodeNew();\n  YGNodeInsertChild(root, childA, 0);\n  auto childB = YGNodeNew();\n  YGNodeInsertChild(root, childB, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(events[3].node, root);\n  ASSERT_EQ(events[3].type, Event::LayoutPassStart);\n\n  ASSERT_EQ(events[11].node, root);\n  ASSERT_EQ(events[11].type, Event::LayoutPassEnd);\n\n  LayoutData layoutData =\n      events[11].eventTestData<Event::LayoutPassEnd>().layoutData;\n\n  ASSERT_EQ(layoutData.layouts, 3);\n  ASSERT_EQ(layoutData.measures, 4);\n  ASSERT_EQ(layoutData.maxMeasureCache, 3);\n}\n\nTEST_F(EventTest, layout_events_counts_cache_hits_single_node_layout) {\n  auto root = YGNodeNew();\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(events[4].node, root);\n  ASSERT_EQ(events[4].type, Event::LayoutPassStart);\n\n  ASSERT_EQ(events[6].node, root);\n  ASSERT_EQ(events[6].type, Event::LayoutPassEnd);\n\n  LayoutData layoutData =\n      events[6].eventTestData<Event::LayoutPassEnd>().layoutData;\n\n  ASSERT_EQ(layoutData.layouts, 0);\n  ASSERT_EQ(layoutData.measures, 0);\n  ASSERT_EQ(layoutData.cachedLayouts, 1);\n  ASSERT_EQ(layoutData.cachedMeasures, 0);\n}\n\nTEST_F(EventTest, layout_events_counts_cache_hits_multi_node_layout) {\n  auto root = YGNodeNew();\n  auto childA = YGNodeNew();\n  YGNodeInsertChild(root, childA, 0);\n  auto childB = YGNodeNew();\n  YGNodeInsertChild(root, childB, 1);\n\n  YGNodeCalculateLayout(root, 987, 654, YGDirectionLTR);\n  YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR);\n\n  YGNodeCalculateLayout(root, 987, 654, YGDirectionLTR);\n\n  ASSERT_EQ(lastEvent().node, root);\n  ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd);\n\n  LayoutData layoutData =\n      lastEvent().eventTestData<Event::LayoutPassEnd>().layoutData;\n\n  ASSERT_EQ(layoutData.layouts, 3);\n  ASSERT_EQ(layoutData.measures, 0);\n  ASSERT_EQ(layoutData.maxMeasureCache, 5);\n  ASSERT_EQ(layoutData.cachedLayouts, 0);\n  ASSERT_EQ(layoutData.cachedMeasures, 4);\n}\n\nTEST_F(EventTest, layout_events_has_max_measure_cache) {\n  auto root = YGNodeNew();\n  auto a = YGNodeNew();\n  YGNodeInsertChild(root, a, 0);\n  auto b = YGNodeNew();\n  YGNodeInsertChild(root, b, 1);\n  YGNodeStyleSetFlexBasis(a, 10.0f);\n\n  for (auto s : {20.0f, 30.0f, 40.0f}) {\n    YGNodeCalculateLayout(root, s, s, YGDirectionLTR);\n  }\n\n  ASSERT_EQ(lastEvent().node, root);\n  ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd);\n\n  LayoutData layoutData =\n      lastEvent().eventTestData<Event::LayoutPassEnd>().layoutData;\n\n  ASSERT_EQ(layoutData.layouts, 3);\n  ASSERT_EQ(layoutData.measures, 3);\n  ASSERT_EQ(layoutData.maxMeasureCache, 7);\n}\n\nTEST_F(EventTest, measure_functions_get_wrapped) {\n  auto root = YGNodeNew();\n  YGNodeSetMeasureFunc(\n      root, [](YGNodeConstRef, float, YGMeasureMode, float, YGMeasureMode) {\n        return YGSize{};\n      });\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(events[2].node, root);\n  ASSERT_EQ(events[2].type, Event::MeasureCallbackStart);\n\n  ASSERT_EQ(events[events.size() - 1].node, root);\n  ASSERT_EQ(events[events.size() - 1].type, Event::LayoutPassEnd);\n}\n\nTEST_F(EventTest, baseline_functions_get_wrapped) {\n  auto root = YGNodeNew();\n  auto child = YGNodeNew();\n  YGNodeInsertChild(root, child, 0);\n\n  YGNodeSetBaselineFunc(\n      child, [](YGNodeConstRef, float, float) { return 0.0f; });\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(events[5].node, child);\n  ASSERT_EQ(events[5].type, Event::NodeBaselineStart);\n\n  ASSERT_EQ(events[events.size() - 1].node, root);\n  ASSERT_EQ(events[events.size() - 1].type, Event::LayoutPassEnd);\n}\n\nnamespace {\n\ntemplate <Event::Type E>\nEventArgs createArgs(YGNodeConstRef node, const Event::Data data) {\n  using Data = Event::TypedData<E>;\n  auto deleteData = [](void* x) { delete static_cast<Data*>(x); };\n\n  return {node, E, {new Data{(data.get<E>())}, deleteData}, nullptr};\n}\n\ntemplate <Event::Type E>\nEventArgs createArgs(\n    YGNodeConstRef node,\n    const Event::Data data,\n    TypedEventTestData<E> eventTestData) {\n  using EventTestData = TypedEventTestData<E>;\n  auto deleteEventTestData = [](void* x) {\n    delete static_cast<EventTestData*>(x);\n  };\n\n  EventArgs args = createArgs<E>(node, data);\n  args.eventTestDataPtr = {\n      new EventTestData{eventTestData}, deleteEventTestData};\n  return args;\n}\n\n} // namespace\n\nvoid EventTest::listen(\n    YGNodeConstRef node,\n    Event::Type type,\n    Event::Data data) {\n  switch (type) {\n    case Event::NodeAllocation:\n      events.push_back(createArgs<Event::NodeAllocation>(node, data));\n      break;\n    case Event::NodeDeallocation:\n      events.push_back(createArgs<Event::NodeDeallocation>(node, data));\n      break;\n    case Event::NodeLayout:\n      events.push_back(createArgs<Event::NodeLayout>(node, data));\n      break;\n    case Event::LayoutPassStart:\n      events.push_back(createArgs<Event::LayoutPassStart>(node, data));\n      break;\n    case Event::LayoutPassEnd: {\n      auto& eventData = data.get<Event::LayoutPassEnd>();\n      events.push_back(\n          createArgs<Event::LayoutPassEnd>(\n              node, data, {*eventData.layoutData}));\n      break;\n    }\n\n    case Event::MeasureCallbackStart:\n      events.push_back(createArgs<Event::MeasureCallbackStart>(node, data));\n      break;\n    case Event::MeasureCallbackEnd:\n      events.push_back(createArgs<Event::MeasureCallbackEnd>(node, data));\n      break;\n    case Event::NodeBaselineStart:\n      events.push_back(createArgs<Event::NodeBaselineStart>(node, data));\n      break;\n    case Event::NodeBaselineEnd:\n      events.push_back(createArgs<Event::NodeBaselineEnd>(node, data));\n      break;\n  }\n}\n\nvoid EventTest::TearDown() {\n  events.clear();\n}\n\nstd::vector<EventArgs> EventTest::events{};\n\n} // namespace facebook::yoga::test\n"
  },
  {
    "path": "tests/FlexGapTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\n// TODO: move this to a fixture based test once it supports parsing negative\n// values\nTEST(FlexGap, gap_negative_value) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetGap(root, YGGutterAll, -20);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/FloatOptionalTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <cmath>\n\n#include <gtest/gtest.h>\n\n#include <yoga/YGValue.h>\n#include <yoga/numeric/Comparison.h>\n#include <yoga/numeric/FloatOptional.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nconstexpr auto empty = FloatOptional{};\nconstexpr auto zero = FloatOptional{0.0f};\nconstexpr auto one = FloatOptional{1.0f};\nconstexpr auto positive = FloatOptional{1234.5f};\nconstexpr auto negative = FloatOptional{-9876.5f};\n\nTEST(FloatOptional, value) {\n  ASSERT_TRUE(YGFloatIsUndefined(empty.unwrap()));\n  ASSERT_EQ(zero.unwrap(), 0.0f);\n  ASSERT_EQ(one.unwrap(), 1.0f);\n  ASSERT_EQ(positive.unwrap(), 1234.5f);\n  ASSERT_EQ(negative.unwrap(), -9876.5f);\n\n  ASSERT_TRUE(empty.isUndefined());\n  ASSERT_FALSE(zero.isUndefined());\n  ASSERT_FALSE(one.isUndefined());\n  ASSERT_FALSE(positive.isUndefined());\n  ASSERT_FALSE(negative.isUndefined());\n}\n\nTEST(FloatOptional, equality) {\n  ASSERT_TRUE(empty == empty);\n  ASSERT_TRUE(empty == YGUndefined);\n  ASSERT_FALSE(empty == zero);\n  ASSERT_FALSE(empty == negative);\n  ASSERT_FALSE(empty == 12.3f);\n\n  ASSERT_TRUE(zero == zero);\n  ASSERT_TRUE(zero == 0.0f);\n  ASSERT_FALSE(zero == positive);\n  ASSERT_FALSE(zero == -5555.5f);\n\n  ASSERT_TRUE(one == one);\n  ASSERT_TRUE(one == 1.0f);\n  ASSERT_FALSE(one == positive);\n\n  ASSERT_TRUE(positive == positive);\n  ASSERT_TRUE(positive == positive.unwrap());\n  ASSERT_FALSE(positive == one);\n\n  ASSERT_TRUE(negative == negative);\n  ASSERT_TRUE(negative == negative.unwrap());\n  ASSERT_FALSE(negative == zero);\n}\n\nTEST(FloatOptional, inequality) {\n  ASSERT_FALSE(empty != empty);\n  ASSERT_FALSE(empty != YGUndefined);\n  ASSERT_TRUE(empty != zero);\n  ASSERT_TRUE(empty != negative);\n  ASSERT_TRUE(empty != 12.3f);\n\n  ASSERT_FALSE(zero != zero);\n  ASSERT_FALSE(zero != 0.0f);\n  ASSERT_TRUE(zero != positive);\n  ASSERT_TRUE(zero != -5555.5f);\n\n  ASSERT_FALSE(one != one);\n  ASSERT_FALSE(one != 1.0f);\n  ASSERT_TRUE(one != positive);\n\n  ASSERT_FALSE(positive != positive);\n  ASSERT_FALSE(positive != positive.unwrap());\n  ASSERT_TRUE(positive != one);\n\n  ASSERT_FALSE(negative != negative);\n  ASSERT_FALSE(negative != negative.unwrap());\n  ASSERT_TRUE(negative != zero);\n}\n\nTEST(FloatOptional, greater_than_with_undefined) {\n  ASSERT_FALSE(empty > empty);\n  ASSERT_FALSE(empty > zero);\n  ASSERT_FALSE(empty > one);\n  ASSERT_FALSE(empty > positive);\n  ASSERT_FALSE(empty > negative);\n  ASSERT_FALSE(zero > empty);\n  ASSERT_FALSE(one > empty);\n  ASSERT_FALSE(positive > empty);\n  ASSERT_FALSE(negative > empty);\n}\n\nTEST(FloatOptional, greater_than) {\n  ASSERT_TRUE(zero > negative);\n  ASSERT_FALSE(zero > zero);\n  ASSERT_FALSE(zero > positive);\n  ASSERT_FALSE(zero > one);\n\n  ASSERT_TRUE(one > negative);\n  ASSERT_TRUE(one > zero);\n  ASSERT_FALSE(one > positive);\n\n  ASSERT_TRUE(negative > FloatOptional{-INFINITY});\n}\n\nTEST(FloatOptional, less_than_with_undefined) {\n  ASSERT_FALSE(empty < empty);\n  ASSERT_FALSE(zero < empty);\n  ASSERT_FALSE(one < empty);\n  ASSERT_FALSE(positive < empty);\n  ASSERT_FALSE(negative < empty);\n  ASSERT_FALSE(empty < zero);\n  ASSERT_FALSE(empty < one);\n  ASSERT_FALSE(empty < positive);\n  ASSERT_FALSE(empty < negative);\n}\n\nTEST(FloatOptional, less_than) {\n  ASSERT_TRUE(negative < zero);\n  ASSERT_FALSE(zero < zero);\n  ASSERT_FALSE(positive < zero);\n  ASSERT_FALSE(one < zero);\n\n  ASSERT_TRUE(negative < one);\n  ASSERT_TRUE(zero < one);\n  ASSERT_FALSE(positive < one);\n\n  ASSERT_TRUE(FloatOptional{-INFINITY} < negative);\n}\n\nTEST(FloatOptional, greater_than_equals_with_undefined) {\n  ASSERT_TRUE(empty >= empty);\n  ASSERT_FALSE(empty >= zero);\n  ASSERT_FALSE(empty >= one);\n  ASSERT_FALSE(empty >= positive);\n  ASSERT_FALSE(empty >= negative);\n  ASSERT_FALSE(zero >= empty);\n  ASSERT_FALSE(one >= empty);\n  ASSERT_FALSE(positive >= empty);\n  ASSERT_FALSE(negative >= empty);\n}\n\nTEST(FloatOptional, greater_than_equals) {\n  ASSERT_TRUE(zero >= negative);\n  ASSERT_TRUE(zero >= zero);\n  ASSERT_FALSE(zero >= positive);\n  ASSERT_FALSE(zero >= one);\n\n  ASSERT_TRUE(one >= negative);\n  ASSERT_TRUE(one >= zero);\n  ASSERT_FALSE(one >= positive);\n\n  ASSERT_TRUE(negative >= FloatOptional{-INFINITY});\n}\n\nTEST(FloatOptional, less_than_equals_with_undefined) {\n  ASSERT_TRUE(empty <= empty);\n  ASSERT_FALSE(zero <= empty);\n  ASSERT_FALSE(one <= empty);\n  ASSERT_FALSE(positive <= empty);\n  ASSERT_FALSE(negative <= empty);\n  ASSERT_FALSE(empty <= zero);\n  ASSERT_FALSE(empty <= one);\n  ASSERT_FALSE(empty <= positive);\n  ASSERT_FALSE(empty <= negative);\n}\n\nTEST(FloatOptional, less_than_equals) {\n  ASSERT_TRUE(negative <= zero);\n  ASSERT_TRUE(zero <= zero);\n  ASSERT_FALSE(positive <= zero);\n  ASSERT_FALSE(one <= zero);\n\n  ASSERT_TRUE(negative <= one);\n  ASSERT_TRUE(zero <= one);\n  ASSERT_FALSE(positive <= one);\n\n  ASSERT_TRUE(FloatOptional{-INFINITY} <= negative);\n}\n\nTEST(FloatOptional, addition) {\n  auto n = negative.unwrap();\n  auto p = positive.unwrap();\n\n  ASSERT_EQ(zero + one, one);\n  ASSERT_EQ(negative + positive, FloatOptional{n + p});\n  ASSERT_EQ(empty + zero, empty);\n  ASSERT_EQ(empty + empty, empty);\n  ASSERT_EQ(negative + empty, empty);\n}\n\nTEST(YGFloatOptiona, maxOrDefined) {\n  ASSERT_EQ(yoga::maxOrDefined(empty, empty), empty);\n  ASSERT_EQ(yoga::maxOrDefined(empty, positive), positive);\n  ASSERT_EQ(yoga::maxOrDefined(negative, empty), negative);\n  ASSERT_EQ(yoga::maxOrDefined(negative, FloatOptional{-INFINITY}), negative);\n  ASSERT_EQ(\n      yoga::maxOrDefined(FloatOptional{1.0f}, FloatOptional{1.125f}),\n      FloatOptional{1.125f});\n}\n\nTEST(FloatOptional, unwrap) {\n  ASSERT_TRUE(YGFloatIsUndefined(empty.unwrap()));\n  ASSERT_EQ(zero.unwrap(), 0.0f);\n  ASSERT_EQ(FloatOptional{123456.78f}.unwrap(), 123456.78f);\n}\n"
  },
  {
    "path": "tests/OrdinalsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <deque>\n\n#include <gtest/gtest.h>\n#include <yoga/enums/Edge.h>\n\nnamespace facebook::yoga {\n\nTEST(Ordinals, iteration) {\n  std::deque expectedEdges{\n      Edge::Left,\n      Edge::Top,\n      Edge::Right,\n      Edge::Bottom,\n      Edge::Start,\n      Edge::End,\n      Edge::Horizontal,\n      Edge::Vertical,\n      Edge::All};\n\n  for (auto edge : yoga::ordinals<Edge>()) {\n    ASSERT_EQ(edge, expectedEdges.front());\n    expectedEdges.pop_front();\n  }\n\n  ASSERT_TRUE(expectedEdges.empty());\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "tests/SmallValueBufferTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/style/SmallValueBuffer.h>\n\nnamespace facebook::yoga {\n\nconstexpr size_t kBufferSize = 4;\n\nTEST(SmallValueBuffer, copy_assignment_with_overflow) {\n  std::array<uint16_t, kBufferSize + 1> handles{};\n\n  SmallValueBuffer<kBufferSize> buffer1;\n  for (size_t i = 0; i < kBufferSize + 1; ++i) {\n    handles[i] = buffer1.push(static_cast<uint32_t>(i));\n  }\n\n  SmallValueBuffer<kBufferSize> buffer2 = buffer1;\n  for (size_t i = 0; i < kBufferSize + 1; ++i) {\n    EXPECT_EQ(buffer2.get32(handles[i]), i);\n  }\n\n  auto handle = buffer1.push(42u);\n  EXPECT_EQ(buffer1.get32(handle), 42);\n\n  EXPECT_THROW({ buffer2.get32(handle); }, std::logic_error);\n}\n\nTEST(SmallValueBuffer, push_32) {\n  uint32_t magic = 88567114u;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic);\n  EXPECT_EQ(buffer.get32(handle), magic);\n}\n\nTEST(SmallValueBuffer, push_overflow) {\n  uint32_t magic1 = 88567114u;\n  uint32_t magic2 = 351012214u;\n  uint32_t magic3 = 146122128u;\n  uint32_t magic4 = 2171092154u;\n  uint32_t magic5 = 2269016953u;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  EXPECT_EQ(buffer.get32(buffer.push(magic1)), magic1);\n  EXPECT_EQ(buffer.get32(buffer.push(magic2)), magic2);\n  EXPECT_EQ(buffer.get32(buffer.push(magic3)), magic3);\n  EXPECT_EQ(buffer.get32(buffer.push(magic4)), magic4);\n  EXPECT_EQ(buffer.get32(buffer.push(magic5)), magic5);\n}\n\nTEST(SmallValueBuffer, push_64) {\n  uint64_t magic = 118138934255546108ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic);\n  EXPECT_EQ(buffer.get64(handle), magic);\n}\n\nTEST(SmallValueBuffer, push_64_overflow) {\n  uint64_t magic1 = 1401612388342512ull;\n  uint64_t magic2 = 118712305386210ull;\n  uint64_t magic3 = 752431801563359011ull;\n  uint64_t magic4 = 118138934255546108ull;\n  uint64_t magic5 = 237115443124116111ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  EXPECT_EQ(buffer.get64(buffer.push(magic1)), magic1);\n  EXPECT_EQ(buffer.get64(buffer.push(magic2)), magic2);\n  EXPECT_EQ(buffer.get64(buffer.push(magic3)), magic3);\n  EXPECT_EQ(buffer.get64(buffer.push(magic4)), magic4);\n  EXPECT_EQ(buffer.get64(buffer.push(magic5)), magic5);\n}\n\nTEST(SmallValueBuffer, push_64_after_32) {\n  uint32_t magic32 = 88567114u;\n  uint64_t magic64 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle32 = buffer.push(magic32);\n  EXPECT_EQ(buffer.get32(handle32), magic32);\n\n  auto handle64 = buffer.push(magic64);\n  EXPECT_EQ(buffer.get64(handle64), magic64);\n}\n\nTEST(SmallValueBuffer, push_32_after_64) {\n  uint32_t magic32 = 88567114u;\n  uint64_t magic64 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle64 = buffer.push(magic64);\n  EXPECT_EQ(buffer.get64(handle64), magic64);\n\n  auto handle32 = buffer.push(magic32);\n  EXPECT_EQ(buffer.get32(handle32), magic32);\n}\n\nTEST(SmallValueBuffer, replace_32_with_32) {\n  uint32_t magic1 = 88567114u;\n  uint32_t magic2 = 351012214u;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic1);\n\n  EXPECT_EQ(buffer.get32(buffer.replace(handle, magic2)), magic2);\n}\n\nTEST(SmallValueBuffer, replace_32_with_64) {\n  uint32_t magic32 = 88567114u;\n  uint64_t magic64 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic32);\n\n  EXPECT_EQ(buffer.get64(buffer.replace(handle, magic64)), magic64);\n}\n\nTEST(SmallValueBuffer, replace_32_with_64_causes_overflow) {\n  uint32_t magic1 = 88567114u;\n  uint32_t magic2 = 351012214u;\n  uint32_t magic3 = 146122128u;\n  uint32_t magic4 = 2171092154u;\n\n  uint64_t magic64 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle1 = buffer.push(magic1);\n  buffer.push(magic2);\n  buffer.push(magic3);\n  buffer.push(magic4);\n\n  EXPECT_EQ(buffer.get64(buffer.replace(handle1, magic64)), magic64);\n}\n\nTEST(SmallValueBuffer, replace_64_with_32) {\n  uint32_t magic32 = 88567114u;\n  uint64_t magic64 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic64);\n\n  EXPECT_EQ(buffer.get32(buffer.replace(handle, magic32)), magic32);\n}\n\nTEST(SmallValueBuffer, replace_64_with_64) {\n  uint64_t magic1 = 1401612388342512ull;\n  uint64_t magic2 = 118712305386210ull;\n\n  SmallValueBuffer<kBufferSize> buffer;\n  auto handle = buffer.push(magic1);\n\n  EXPECT_EQ(buffer.get64(buffer.replace(handle, magic2)), magic2);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "tests/StyleTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/style/Style.h>\n\nnamespace facebook::yoga {\n\nTEST(Style, computed_padding_is_floored) {\n  yoga::Style style;\n  style.setPadding(Edge::All, StyleLength::points(-1.0f));\n  auto paddingStart = style.computeInlineStartPadding(\n      FlexDirection::Row, Direction::LTR, 0.0f /*widthSize*/);\n  ASSERT_EQ(paddingStart, 0.0f);\n}\n\nTEST(Style, computed_border_is_floored) {\n  yoga::Style style;\n  style.setBorder(Edge::All, StyleLength::points(-1.0f));\n  auto borderStart =\n      style.computeInlineStartBorder(FlexDirection::Row, Direction::LTR);\n  ASSERT_EQ(borderStart, 0.0f);\n}\n\nTEST(Style, computed_gap_is_floored) {\n  yoga::Style style;\n  style.setGap(Gutter::Column, StyleLength::points(-1.0f));\n  auto gapBetweenColumns = style.computeGapForAxis(FlexDirection::Row, 0.0);\n  ASSERT_EQ(gapBetweenColumns, 0.0f);\n}\n\nTEST(Style, computed_margin_is_not_floored) {\n  yoga::Style style;\n  style.setMargin(Edge::All, StyleLength::points(-1.0f));\n  auto marginStart = style.computeInlineStartMargin(\n      FlexDirection::Row, Direction::LTR, 0.0f /*widthSize*/);\n  ASSERT_EQ(marginStart, -1.0f);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "tests/StyleValuePoolTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/style/StyleValuePool.h>\n\nnamespace facebook::yoga {\n\nTEST(StyleValuePool, undefined_at_init) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  EXPECT_TRUE(handle.isUndefined());\n  EXPECT_FALSE(handle.isDefined());\n  EXPECT_EQ(pool.getLength(handle), StyleLength::undefined());\n  EXPECT_EQ(pool.getNumber(handle), FloatOptional{});\n}\n\nTEST(StyleValuePool, auto_at_init) {\n  StyleValuePool pool;\n  auto handle = StyleValueHandle::ofAuto();\n\n  EXPECT_TRUE(handle.isAuto());\n  EXPECT_EQ(pool.getLength(handle), StyleLength::ofAuto());\n}\n\nTEST(StyleValuePool, store_small_int_points) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::points(10));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::points(10));\n}\n\nTEST(StyleValuePool, store_small_negative_int_points) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::points(-10));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::points(-10));\n}\n\nTEST(StyleValuePool, store_small_int_percent) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::percent(10));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::percent(10));\n}\n\nTEST(StyleValuePool, store_large_int_percent) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::percent(262144));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::percent(262144));\n}\n\nTEST(StyleValuePool, store_large_int_after_small_int) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::percent(10));\n  pool.store(handle, StyleLength::percent(262144));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::percent(262144));\n}\n\nTEST(StyleValuePool, store_small_int_after_large_int) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::percent(262144));\n  pool.store(handle, StyleLength::percent(10));\n\n  EXPECT_EQ(pool.getLength(handle), StyleLength::percent(10));\n}\n\nTEST(StyleValuePool, store_small_int_number) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, FloatOptional{10.0f});\n\n  EXPECT_EQ(pool.getNumber(handle), FloatOptional{10.0f});\n}\n\nTEST(StyleValuePool, store_undefined) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::undefined());\n\n  EXPECT_TRUE(handle.isUndefined());\n  EXPECT_FALSE(handle.isDefined());\n  EXPECT_EQ(pool.getLength(handle), StyleLength::undefined());\n}\n\nTEST(StyleValuePool, store_undefined_after_small_int) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::points(10));\n  pool.store(handle, StyleLength::undefined());\n\n  EXPECT_TRUE(handle.isUndefined());\n  EXPECT_FALSE(handle.isDefined());\n  EXPECT_EQ(pool.getLength(handle), StyleLength::undefined());\n}\n\nTEST(StyleValuePool, store_undefined_after_large_int) {\n  StyleValuePool pool;\n  StyleValueHandle handle;\n\n  pool.store(handle, StyleLength::points(262144));\n  pool.store(handle, StyleLength::undefined());\n\n  EXPECT_TRUE(handle.isUndefined());\n  EXPECT_FALSE(handle.isDefined());\n  EXPECT_EQ(pool.getLength(handle), StyleLength::undefined());\n}\n\nTEST(StyleValuePool, store_keywords) {\n  StyleValuePool pool;\n  StyleValueHandle handleMaxContent;\n  StyleValueHandle handleFitContent;\n  StyleValueHandle handleStretch;\n\n  pool.store(handleMaxContent, StyleSizeLength::ofMaxContent());\n  pool.store(handleFitContent, StyleSizeLength::ofFitContent());\n  pool.store(handleStretch, StyleSizeLength::ofStretch());\n\n  EXPECT_EQ(pool.getSize(handleMaxContent), StyleSizeLength::ofMaxContent());\n  EXPECT_EQ(pool.getSize(handleFitContent), StyleSizeLength::ofFitContent());\n  EXPECT_EQ(pool.getSize(handleStretch), StyleSizeLength::ofStretch());\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "tests/YGAlignBaselineTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic float _baselineFunc(\n    YGNodeConstRef /*node*/,\n    const float /*width*/,\n    const float height) {\n  return height / 2;\n}\n\nstatic YGSize _measure1(\n    YGNodeConstRef /*node*/,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{42, 50};\n}\n\nstatic YGSize _measure2(\n    YGNodeConstRef /*node*/,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{279, 126};\n}\n\nstatic YGNodeRef createYGNode(\n    YGConfigRef config,\n    YGFlexDirection direction,\n    int width,\n    int height,\n    bool alignBaseline) {\n  YGNodeRef node = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(node, direction);\n  if (alignBaseline) {\n    YGNodeStyleSetAlignItems(node, YGAlignBaseline);\n  }\n  YGNodeStyleSetWidth(node, (float)width);\n  YGNodeStyleSetHeight(node, (float)height);\n  return node;\n}\n\n// Test case for bug in T32999822\nTEST(YogaTest, align_baseline_parent_ht_not_specified) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 340);\n  YGNodeStyleSetMaxHeight(root, 170);\n  YGNodeStyleSetMinHeight(root, 0);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 0);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeSetMeasureFunc(root_child0, _measure1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 0);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeSetMeasureFunc(root_child1, _measure2);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(340, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(126, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n  ASSERT_FLOAT_EQ(76, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(126, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_with_no_parent_ht) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 150);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 40);\n  YGNodeSetBaselineFunc(root_child1, _baselineFunc);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_with_no_baseline_func_and_no_parent_ht) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 150);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 80);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_parent_using_child_in_column_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_with_padding_in_column_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeRight, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeTop, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_with_padding_using_child_in_column_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeStyleSetPadding(root_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeRight, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_with_margin_using_child_in_column_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeStyleSetMargin(root_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetMargin(root_child1, YGEdgeRight, 100);\n  YGNodeStyleSetMargin(root_child1, YGEdgeTop, 100);\n  YGNodeStyleSetMargin(root_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(600, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_with_margin_in_column_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeTop, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_parent_using_child_in_row_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionRow, 500, 800, true);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_with_padding_in_row_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionRow, 500, 800, true);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeRight, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeTop, 100);\n  YGNodeStyleSetPadding(root_child1_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_with_margin_in_row_as_reference) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionRow, 500, 800, true);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeLeft, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeTop, 100);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeBottom, 100);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(600, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_column_as_reference_with_no_baseline_func) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 800, false);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_row_as_reference_with_no_baseline_func) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = createYGNode(config, YGFlexDirectionRow, 1000, 1000, true);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 =\n      createYGNode(config, YGFlexDirectionRow, 500, 800, true);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_column_as_reference_with_height_not_specified) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 1000);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(800, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_row_as_reference_with_height_not_specified) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 1000);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(900, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_column_as_reference_with_no_baseline_func_and_height_not_specified) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 1000);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 300, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    align_baseline_parent_using_child_in_row_as_reference_with_no_baseline_func_and_height_not_specified) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 1000);\n\n  YGNodeRef root_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 600, false);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 500, false);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 =\n      createYGNode(config, YGFlexDirectionColumn, 500, 400, false);\n  YGNodeSetIsReferenceBaseline(root_child1_child1, true);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/YGAspectRatioTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic YGSize _measure(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  return YGSize{\n      widthMode == YGMeasureModeExactly ? width : 50,\n      heightMode == YGMeasureModeExactly ? height : 50,\n  };\n}\n\nTEST(YogaTest, aspect_ratio_cross_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_main_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_both_dimensions_defined_row) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_both_dimensions_defined_column) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_align_stretch) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_flex_grow) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_flex_shrink) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 150);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_flex_shrink_2) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeightPercent(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetHeightPercent(root_child1, 100);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetAspectRatio(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_basis) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_absolute_layout_width_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 0);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_absolute_layout_height_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 0);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_with_max_cross_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMaxWidth(root_child0, 40);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_with_max_main_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetMaxHeight(root_child0, 40);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_with_min_cross_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 30);\n  YGNodeStyleSetMinWidth(root_child0, 40);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_with_min_main_defined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeStyleSetMinHeight(root_child0, 40);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_double_cross) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_half_cross) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetAspectRatio(root_child0, 0.5);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_double_main) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 0.5);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_half_main) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetAspectRatio(root_child0, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_with_measure_func) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_width_height_flex_grow_row) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_width_height_flex_grow_column) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_height_as_flex_basis) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetAspectRatio(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(75, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_EQ(125, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_EQ(125, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_width_as_flex_basis) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetAspectRatio(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(75, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_EQ(125, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_EQ(125, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_overrides_flex_grow_row) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 0.5);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_overrides_flex_grow_column) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetAspectRatio(root_child0, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_left_right_absolute) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 10);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_top_bottom_absolute) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_width_overrides_align_stretch_row) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_height_overrides_align_stretch_column) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_allow_child_overflow_parent_size) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 4);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_defined_main_with_margin) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_defined_cross_with_margin) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_defined_cross_with_main_margin) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetAspectRatio(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_should_prefer_explicit_height) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetUseWebDefaults(config, true);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumn);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionColumn);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetAspectRatio(root_child0_child0, 2);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, 200, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_should_prefer_explicit_width) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetUseWebDefaults(config, true);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetAspectRatio(root_child0_child0, 0.5);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, aspect_ratio_should_prefer_flexed_dimension) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetUseWebDefaults(config, true);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumn);\n  YGNodeStyleSetAspectRatio(root_child0, 2);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAspectRatio(root_child0_child0, 4);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGBaselineFuncTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic float\n_baseline(YGNodeConstRef node, const float /*width*/, const float /*height*/) {\n  auto* baseline = (float*)YGNodeGetContext(node);\n  return *baseline;\n}\n\nTEST(YogaTest, align_baseline_customer_func) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  float baselineValue = 10;\n  YGNodeRef root_child1_child0 = YGNodeNew();\n  YGNodeSetContext(root_child1_child0, &baselineValue);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeSetBaselineFunc(root_child1_child0, _baseline);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n}\n"
  },
  {
    "path": "tests/YGCloneNodeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic void recursivelyAssertProperNodeOwnership(YGNodeRef node) {\n  for (size_t i = 0; i < YGNodeGetChildCount(node); ++i) {\n    const auto child = YGNodeGetChild(node, i);\n    ASSERT_EQ(node, YGNodeGetOwner(child));\n    recursivelyAssertProperNodeOwnership(child);\n  }\n}\n\nTEST(YogaTest, absolute_node_cloned_with_static_parent) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 1);\n  YGNodeStyleSetHeight(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeRef clonedRoot = YGNodeClone(root);\n  YGNodeStyleSetWidth(clonedRoot, 110);\n  YGNodeCalculateLayout(clonedRoot, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  recursivelyAssertProperNodeOwnership(clonedRoot);\n\n  YGNodeFreeRecursive(root);\n  YGNodeFreeRecursive(clonedRoot);\n}\n\nTEST(YogaTest, absolute_node_cloned_with_static_ancestors) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0_child0, 40);\n  YGNodeStyleSetHeight(root_child0_child0, 40);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 30);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 30);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(\n      root_child0_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0_child0, 1);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 1);\n  YGNodeInsertChild(\n      root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeRef clonedRoot = YGNodeClone(root);\n  YGNodeStyleSetWidth(clonedRoot, 110);\n  YGNodeCalculateLayout(clonedRoot, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  recursivelyAssertProperNodeOwnership(clonedRoot);\n\n  YGNodeFreeRecursive(root);\n  YGNodeFreeRecursive(clonedRoot);\n}\n"
  },
  {
    "path": "tests/YGComputedMarginTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <array>\n\nTEST(YogaTest, computed_layout_margin) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetMarginPercent(root, YGEdgeStart, 10);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetMargin(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeRight));\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetMargin(root, YGEdgeRight));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, margin_side_overrides_horizontal_and_vertical) {\n  const std::array<YGEdge, 6> edges = {\n      {YGEdgeTop,\n       YGEdgeBottom,\n       YGEdgeStart,\n       YGEdgeEnd,\n       YGEdgeLeft,\n       YGEdgeRight}};\n\n  for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {\n    for (const auto& edge : edges) {\n      YGEdge horizontalOrVertical = edge == YGEdgeTop || edge == YGEdgeBottom\n          ? YGEdgeVertical\n          : YGEdgeHorizontal;\n\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetMargin(root, horizontalOrVertical, 10);\n      YGNodeStyleSetMargin(root, edge, edgeValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      ASSERT_FLOAT_EQ(edgeValue, YGNodeLayoutGetMargin(root, edge));\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n\nTEST(YogaTest, margin_side_overrides_all) {\n  const std::array<YGEdge, 6> edges = {\n      {YGEdgeTop,\n       YGEdgeBottom,\n       YGEdgeStart,\n       YGEdgeEnd,\n       YGEdgeLeft,\n       YGEdgeRight}};\n\n  for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {\n    for (const auto& edge : edges) {\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetMargin(root, YGEdgeAll, 10);\n      YGNodeStyleSetMargin(root, edge, edgeValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      ASSERT_FLOAT_EQ(edgeValue, YGNodeLayoutGetMargin(root, edge));\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n\nTEST(YogaTest, margin_horizontal_and_vertical_overrides_all) {\n  const std::array<YGEdge, 2> directions = {{YGEdgeHorizontal, YGEdgeVertical}};\n\n  for (float directionValue = 0; directionValue < 2; ++directionValue) {\n    for (const auto& direction : directions) {\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetMargin(root, YGEdgeAll, 10);\n      YGNodeStyleSetMargin(root, direction, directionValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      if (direction == YGEdgeVertical) {\n        ASSERT_FLOAT_EQ(directionValue, YGNodeLayoutGetMargin(root, YGEdgeTop));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetMargin(root, YGEdgeBottom));\n      } else {\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetMargin(root, YGEdgeStart));\n        ASSERT_FLOAT_EQ(directionValue, YGNodeLayoutGetMargin(root, YGEdgeEnd));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetMargin(root, YGEdgeLeft));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetMargin(root, YGEdgeRight));\n      }\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n"
  },
  {
    "path": "tests/YGComputedPaddingTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <array>\n\nTEST(YogaTest, computed_layout_padding) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPaddingPercent(root, YGEdgeStart, 10);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetPadding(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeRight));\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetPadding(root, YGEdgeRight));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, padding_side_overrides_horizontal_and_vertical) {\n  const std::array<YGEdge, 6> edges = {\n      {YGEdgeTop,\n       YGEdgeBottom,\n       YGEdgeStart,\n       YGEdgeEnd,\n       YGEdgeLeft,\n       YGEdgeRight}};\n\n  for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {\n    for (const auto& edge : edges) {\n      YGEdge horizontalOrVertical = edge == YGEdgeTop || edge == YGEdgeBottom\n          ? YGEdgeVertical\n          : YGEdgeHorizontal;\n\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetPadding(root, horizontalOrVertical, 10);\n      YGNodeStyleSetPadding(root, edge, edgeValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      ASSERT_FLOAT_EQ(edgeValue, YGNodeLayoutGetPadding(root, edge));\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n\nTEST(YogaTest, padding_side_overrides_all) {\n  const std::array<YGEdge, 6> edges = {\n      {YGEdgeTop,\n       YGEdgeBottom,\n       YGEdgeStart,\n       YGEdgeEnd,\n       YGEdgeLeft,\n       YGEdgeRight}};\n\n  for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {\n    for (const auto& edge : edges) {\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n      YGNodeStyleSetPadding(root, edge, edgeValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      ASSERT_FLOAT_EQ(edgeValue, YGNodeLayoutGetPadding(root, edge));\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n\nTEST(YogaTest, padding_horizontal_and_vertical_overrides_all) {\n  const std::array<YGEdge, 2> directions = {{YGEdgeHorizontal, YGEdgeVertical}};\n\n  for (float directionValue = 0; directionValue < 2; ++directionValue) {\n    for (const auto& direction : directions) {\n      YGNodeRef root = YGNodeNew();\n      YGNodeStyleSetWidth(root, 100);\n      YGNodeStyleSetHeight(root, 100);\n      YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n      YGNodeStyleSetPadding(root, direction, directionValue);\n\n      YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n      if (direction == YGEdgeVertical) {\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeTop));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeBottom));\n      } else {\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeStart));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeEnd));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeLeft));\n        ASSERT_FLOAT_EQ(\n            directionValue, YGNodeLayoutGetPadding(root, YGEdgeRight));\n      }\n\n      YGNodeFreeRecursive(root);\n    }\n  }\n}\n"
  },
  {
    "path": "tests/YGConfigTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <yoga/config/Config.h>\n#include <yoga/node/Node.h>\n\n#include <functional>\n#include <memory>\n\nusing namespace facebook;\n\nstruct ConfigCloningTest : public ::testing::Test {\n  std::unique_ptr<yoga::Config, std::function<void(yoga::Config*)>> config;\n  void SetUp() override;\n  void TearDown() override;\n\n  static yoga::Node clonedNode;\n  static YGNodeRef cloneNode(\n      YGNodeConstRef /*unused*/,\n      YGNodeConstRef /*unused*/,\n      size_t /*unused*/) {\n    return &clonedNode;\n  }\n  static YGNodeRef doNotClone(\n      YGNodeConstRef /*unused*/,\n      YGNodeConstRef /*unused*/,\n      size_t /*unused*/) {\n    return nullptr;\n  }\n};\n\nTEST_F(ConfigCloningTest, uses_values_provided_by_cloning_callback) {\n  config->setCloneNodeCallback(cloneNode);\n\n  yoga::Node node{};\n  yoga::Node owner{};\n  auto clone = config->cloneNode(&node, &owner, 0);\n\n  ASSERT_EQ(clone, &clonedNode);\n}\n\nTEST_F(\n    ConfigCloningTest,\n    falls_back_to_regular_cloning_if_callback_returns_null) {\n  config->setCloneNodeCallback(doNotClone);\n\n  yoga::Node node{};\n  yoga::Node owner{};\n  auto clone = config->cloneNode(&node, &owner, 0);\n\n  ASSERT_NE(clone, nullptr);\n  YGNodeFree(clone);\n}\n\nvoid ConfigCloningTest::SetUp() {\n  config = {static_cast<yoga::Config*>(YGConfigNew()), YGConfigFree};\n}\n\nvoid ConfigCloningTest::TearDown() {\n  config.reset();\n}\n\nyoga::Node ConfigCloningTest::clonedNode = {};\n"
  },
  {
    "path": "tests/YGDefaultValuesTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, assert_default_values) {\n  YGNodeRef root = YGNodeNew();\n\n  ASSERT_EQ(0u, YGNodeGetChildCount(root));\n  ASSERT_EQ(nullptr, YGNodeGetChild(root, 1));\n\n  ASSERT_EQ(YGDirectionInherit, YGNodeStyleGetDirection(root));\n  ASSERT_EQ(YGFlexDirectionColumn, YGNodeStyleGetFlexDirection(root));\n  ASSERT_EQ(YGJustifyFlexStart, YGNodeStyleGetJustifyContent(root));\n  ASSERT_EQ(YGAlignFlexStart, YGNodeStyleGetAlignContent(root));\n  ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignItems(root));\n  ASSERT_EQ(YGAlignAuto, YGNodeStyleGetAlignSelf(root));\n  ASSERT_EQ(YGPositionTypeRelative, YGNodeStyleGetPositionType(root));\n  ASSERT_EQ(YGWrapNoWrap, YGNodeStyleGetFlexWrap(root));\n  ASSERT_EQ(YGOverflowVisible, YGNodeStyleGetOverflow(root));\n  ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexGrow(root));\n  ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexShrink(root));\n  ASSERT_EQ(YGNodeStyleGetFlexBasis(root).unit, YGUnitAuto);\n\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeLeft).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeTop).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeRight).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeBottom).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeStart).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPosition(root, YGEdgeEnd).unit, YGUnitUndefined);\n\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeLeft).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeTop).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeRight).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeBottom).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeStart).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMargin(root, YGEdgeEnd).unit, YGUnitUndefined);\n\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeLeft).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeTop).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeRight).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeBottom).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeStart).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetPadding(root, YGEdgeEnd).unit, YGUnitUndefined);\n\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeLeft)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeTop)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeRight)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeBottom)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeStart)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeStyleGetBorder(root, YGEdgeEnd)));\n\n  ASSERT_EQ(YGNodeStyleGetWidth(root).unit, YGUnitAuto);\n  ASSERT_EQ(YGNodeStyleGetHeight(root).unit, YGUnitAuto);\n  ASSERT_EQ(YGNodeStyleGetMinWidth(root).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMinHeight(root).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMaxWidth(root).unit, YGUnitUndefined);\n  ASSERT_EQ(YGNodeStyleGetMaxHeight(root).unit, YGUnitUndefined);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetRight(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBottom(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeTop));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeRight));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(root, YGEdgeBottom));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeTop));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeRight));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(root, YGEdgeBottom));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeLeft));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeTop));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeRight));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetBorder(root, YGEdgeBottom));\n\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetWidth(root)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetHeight(root)));\n  ASSERT_EQ(YGDirectionInherit, YGNodeLayoutGetDirection(root));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, assert_webdefault_values) {\n  YGConfig* config = YGConfigNew();\n  YGConfigSetUseWebDefaults(config, true);\n  YGNodeRef root = YGNodeNewWithConfig(config);\n\n  ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(root));\n  ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignContent(root));\n  ASSERT_FLOAT_EQ(1.0f, YGNodeStyleGetFlexShrink(root));\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, assert_webdefault_values_reset) {\n  YGConfig* config = YGConfigNew();\n  YGConfigSetUseWebDefaults(config, true);\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeReset(root);\n\n  ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(root));\n  ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignContent(root));\n  ASSERT_FLOAT_EQ(1.0f, YGNodeStyleGetFlexShrink(root));\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, assert_legacy_stretch_behaviour) {\n  YGConfig* config = YGConfigNew();\n  YGConfigSetErrata(config, YGErrataStretchFlexBasis);\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, assert_box_sizing_border_box) {\n  YGConfig* config = YGConfigNew();\n  YGNodeRef root = YGNodeNewWithConfig(config);\n\n  ASSERT_EQ(YGBoxSizingBorderBox, YGNodeStyleGetBoxSizing(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/YGDirtiedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n\nusing namespace facebook;\n\nstatic void _dirtied(YGNodeConstRef node) {\n  int* dirtiedCount = (int*)YGNodeGetContext(node);\n  (*dirtiedCount)++;\n}\n\nTEST(YogaTest, dirtied) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  int dirtiedCount = 0;\n  YGNodeSetContext(root, &dirtiedCount);\n  YGNodeSetDirtiedFunc(root, _dirtied);\n\n  ASSERT_EQ(0, dirtiedCount);\n\n  // `_dirtied` MUST be called in case of explicit dirtying.\n  static_cast<yoga::Node*>(root)->setDirty(true);\n  ASSERT_EQ(1, dirtiedCount);\n\n  // `_dirtied` MUST be called ONCE.\n  static_cast<yoga::Node*>(root)->setDirty(true);\n  ASSERT_EQ(1, dirtiedCount);\n}\n\nTEST(YogaTest, dirtied_propagation) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  int dirtiedCount = 0;\n  YGNodeSetContext(root, &dirtiedCount);\n  YGNodeSetDirtiedFunc(root, _dirtied);\n\n  ASSERT_EQ(0, dirtiedCount);\n\n  // `_dirtied` MUST be called for the first time.\n  static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();\n  ASSERT_EQ(1, dirtiedCount);\n\n  // `_dirtied` must NOT be called for the second time.\n  static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();\n  ASSERT_EQ(1, dirtiedCount);\n}\n\nTEST(YogaTest, dirtied_hierarchy) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  int dirtiedCount = 0;\n  YGNodeSetContext(root_child0, &dirtiedCount);\n  YGNodeSetDirtiedFunc(root_child0, _dirtied);\n\n  ASSERT_EQ(0, dirtiedCount);\n\n  // `_dirtied` must NOT be called for descendants.\n  static_cast<yoga::Node*>(root)->markDirtyAndPropagate();\n  ASSERT_EQ(0, dirtiedCount);\n\n  // `_dirtied` must NOT be called for the sibling node.\n  static_cast<yoga::Node*>(root_child1)->markDirtyAndPropagate();\n  ASSERT_EQ(0, dirtiedCount);\n\n  // `_dirtied` MUST be called in case of explicit dirtying.\n  static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();\n  ASSERT_EQ(1, dirtiedCount);\n}\n"
  },
  {
    "path": "tests/YGDirtyMarkingTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, dirty_propagation) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeStyleSetWidth(root_child0, 20);\n\n  EXPECT_TRUE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_TRUE(YGNodeIsDirty(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_propagation_only_if_prop_changed) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeStyleSetWidth(root_child0, 50);\n\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_propagation_changing_layout_config) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0_child0, 25);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(root));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));\n\n  YGConfigRef newConfig = YGConfigNew();\n  YGConfigSetErrata(newConfig, YGErrataStretchFlexBasis);\n  YGNodeSetConfig(root_child0, newConfig);\n\n  EXPECT_TRUE(YGNodeIsDirty(root));\n  EXPECT_TRUE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(root));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));\n\n  YGConfigFree(newConfig);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_propagation_changing_benign_config) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0_child0, 25);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(root));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));\n\n  YGConfigRef newConfig = YGConfigNew();\n  YGConfigSetLogger(\n      newConfig,\n      [](YGConfigConstRef, YGNodeConstRef, YGLogLevel, const char*, va_list) {\n        return 0;\n      });\n  YGNodeSetConfig(root_child0, newConfig);\n\n  EXPECT_FALSE(YGNodeIsDirty(root));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0));\n  EXPECT_FALSE(YGNodeIsDirty(root_child1));\n  EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));\n\n  YGConfigFree(newConfig);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_mark_all_children_as_dirty_when_display_changes) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(child0, 1);\n  YGNodeRef child1 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(child1, 1);\n\n  YGNodeRef child1_child0 = YGNodeNew();\n  YGNodeRef child1_child0_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(child1_child0_child0, 8);\n  YGNodeStyleSetHeight(child1_child0_child0, 16);\n\n  YGNodeInsertChild(child1_child0, child1_child0_child0, 0);\n\n  YGNodeInsertChild(child1, child1_child0, 0);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeInsertChild(root, child1, 0);\n\n  YGNodeStyleSetDisplay(child0, YGDisplayFlex);\n  YGNodeStyleSetDisplay(child1, YGDisplayNone);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(child1_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(child1_child0_child0));\n\n  YGNodeStyleSetDisplay(child0, YGDisplayNone);\n  YGNodeStyleSetDisplay(child1, YGDisplayFlex);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetWidth(child1_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetHeight(child1_child0_child0));\n\n  YGNodeStyleSetDisplay(child0, YGDisplayFlex);\n  YGNodeStyleSetDisplay(child1, YGDisplayNone);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(child1_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(child1_child0_child0));\n\n  YGNodeStyleSetDisplay(child0, YGDisplayNone);\n  YGNodeStyleSetDisplay(child1, YGDisplayFlex);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetWidth(child1_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetHeight(child1_child0_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_node_only_if_children_are_actually_removed) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef child0 = YGNodeNew();\n  YGNodeStyleSetWidth(child0, 50);\n  YGNodeStyleSetHeight(child0, 25);\n  YGNodeInsertChild(root, child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeRef child1 = YGNodeNew();\n  YGNodeRemoveChild(root, child1);\n  EXPECT_FALSE(YGNodeIsDirty(root));\n  YGNodeFree(child1);\n\n  YGNodeRemoveChild(root, child0);\n  EXPECT_TRUE(YGNodeIsDirty(root));\n  YGNodeFree(child0);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_node_only_if_undefined_values_gets_set_to_undefined) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetMinWidth(root, YGUndefined);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  EXPECT_FALSE(YGNodeIsDirty(root));\n\n  YGNodeStyleSetMinWidth(root, YGUndefined);\n\n  EXPECT_FALSE(YGNodeIsDirty(root));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_removed_child_node) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef child = YGNodeNew();\n  YGNodeStyleSetWidth(child, 50);\n  YGNodeStyleSetHeight(child, 50);\n  YGNodeInsertChild(root, child, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(child));\n\n  YGNodeRemoveChild(root, child);\n\n  // Child should be marked dirty after removal so layout is recalculated\n  // when the child is reused (e.g., in a recycling view system)\n  EXPECT_TRUE(YGNodeIsDirty(child));\n\n  YGNodeFree(child);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dirty_removed_child_nodes_when_removing_all) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef child0 = YGNodeNew();\n  YGNodeStyleSetWidth(child0, 50);\n  YGNodeStyleSetHeight(child0, 25);\n  YGNodeInsertChild(root, child0, 0);\n\n  YGNodeRef child1 = YGNodeNew();\n  YGNodeStyleSetWidth(child1, 50);\n  YGNodeStyleSetHeight(child1, 25);\n  YGNodeInsertChild(root, child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_FALSE(YGNodeIsDirty(child0));\n  EXPECT_FALSE(YGNodeIsDirty(child1));\n\n  YGNodeRemoveAllChildren(root);\n\n  // All children should be marked dirty after removal\n  EXPECT_TRUE(YGNodeIsDirty(child0));\n  EXPECT_TRUE(YGNodeIsDirty(child1));\n\n  YGNodeFree(child0);\n  YGNodeFree(child1);\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGEdgeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, start_overrides) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 20);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetRight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetRight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, end_overrides) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 20);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetRight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetRight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, horizontal_overridden) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeHorizontal, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetRight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, vertical_overridden) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeVertical, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetBottom(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, horizontal_overrides_all) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeHorizontal, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetRight(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetBottom(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, vertical_overrides_all) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeVertical, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetRight(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetBottom(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, all_overridden) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetRight(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetBottom(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGFlexBasisFitContentTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <algorithm>\n\nstatic YGSize measureTextLike(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode widthMode,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  float measuredWidth = 200.0f;\n  if (widthMode == YGMeasureModeAtMost) {\n    measuredWidth = std::min(measuredWidth, width);\n  }\n  return YGSize{.width = measuredWidth, .height = 20.0f};\n}\n\nclass YGFlexBasisFitContentTest : public testing::TestWithParam<bool> {\n protected:\n  void SetUp() override {\n    config_ = YGConfigNew();\n    YGConfigSetExperimentalFeatureEnabled(\n        config_, YGExperimentalFeatureFixFlexBasisFitContent, GetParam());\n  }\n\n  void TearDown() override {\n    if (root_ != nullptr) {\n      YGNodeFreeRecursive(root_);\n    }\n    YGConfigFree(config_);\n  }\n\n  YGConfigRef config_ = nullptr;\n  YGNodeRef root_ = nullptr;\n};\n\n// Auto-height container with a percentage-height child produces the same\n// layout regardless of feature state, because Check 3 preserves percentage\n// resolution when availableInnerHeight is NaN.\nTEST_P(YGFlexBasisFitContentTest, percentage_height_converges) {\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeight(root_, 300);\n  YGNodeStyleSetWidth(root_, 100);\n\n  YGNodeRef container = YGNodeNewWithConfig(config_);\n  YGNodeInsertChild(root_, container, 0);\n\n  YGNodeRef child = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeightPercent(child, 50);\n  YGNodeInsertChild(container, child, 0);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(child));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(container));\n}\n\n// Two auto-height containers with percentage children and flexGrow:1 produce\n// the same layout regardless of feature state.\nTEST_P(YGFlexBasisFitContentTest, percentage_with_flex_grow_converges) {\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeight(root_, 400);\n  YGNodeStyleSetWidth(root_, 100);\n\n  YGNodeRef containerA = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetFlexGrow(containerA, 1);\n  YGNodeInsertChild(root_, containerA, 0);\n\n  YGNodeRef childA = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeightPercent(childA, 25);\n  YGNodeInsertChild(containerA, childA, 0);\n\n  YGNodeRef containerB = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetFlexGrow(containerB, 1);\n  YGNodeInsertChild(root_, containerB, 1);\n\n  YGNodeRef childB = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeightPercent(childB, 50);\n  YGNodeInsertChild(containerB, childB, 0);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(containerA));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetHeight(containerB));\n}\n\n// Auto-height container with flexShrink and a percentage child causing\n// overflow produces the same layout regardless of feature state.\nTEST_P(YGFlexBasisFitContentTest, flex_shrink_overflow_converges) {\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeight(root_, 200);\n  YGNodeStyleSetWidth(root_, 100);\n\n  YGNodeRef container = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetFlexShrink(container, 1);\n  YGNodeInsertChild(root_, container, 0);\n\n  YGNodeRef child = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeightPercent(child, 100);\n  YGNodeInsertChild(container, child, 0);\n\n  YGNodeRef fixed = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeight(fixed, 150);\n  YGNodeInsertChild(root_, fixed, 1);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(container));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(fixed));\n}\n\n// In a scroll container (column), changing a sibling's height does not cause\n// re-measurement of unaffected subtrees when the feature is enabled.\nTEST_P(YGFlexBasisFitContentTest, scroll_avoids_remeasure) {\n  static uint32_t measureCount = 0;\n  auto measureFunc = [](YGNodeConstRef /*node*/,\n                        float /*width*/,\n                        YGMeasureMode /*widthMode*/,\n                        float /*height*/,\n                        YGMeasureMode /*heightMode*/) {\n    measureCount++;\n    return YGSize{.width = 50.0f, .height = 50.0f};\n  };\n\n  measureCount = 0;\n\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetOverflow(root_, YGOverflowScroll);\n  YGNodeStyleSetWidth(root_, 100);\n  YGNodeStyleSetHeight(root_, 500);\n\n  YGNodeRef sibling = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetHeight(sibling, 100);\n  YGNodeInsertChild(root_, sibling, 0);\n\n  YGNodeRef wrapper = YGNodeNewWithConfig(config_);\n  YGNodeInsertChild(root_, wrapper, 1);\n\n  YGNodeRef inner = YGNodeNewWithConfig(config_);\n  YGNodeInsertChild(wrapper, inner, 0);\n\n  YGNodeRef leaf = YGNodeNewWithConfig(config_);\n  YGNodeSetMeasureFunc(leaf, measureFunc);\n  YGNodeInsertChild(inner, leaf, 0);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n  uint32_t firstPassCount = measureCount;\n\n  YGNodeStyleSetHeight(sibling, 200);\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n  uint32_t secondPassCount = measureCount - firstPassCount;\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(leaf));\n\n  EXPECT_EQ(0, secondPassCount);\n}\n\n// Row direction is unaffected by the optimization. Width FitContent is always\n// preserved to support text wrapping through container nodes.\nTEST_P(YGFlexBasisFitContentTest, row_direction_unchanged) {\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetWidth(root_, 100);\n  YGNodeStyleSetHeight(root_, 100);\n\n  YGNodeRef container = YGNodeNewWithConfig(config_);\n  YGNodeInsertChild(root_, container, 0);\n\n  YGNodeRef text = YGNodeNewWithConfig(config_);\n  YGNodeSetMeasureFunc(text, measureTextLike);\n  YGNodeInsertChild(container, text, 0);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(text));\n}\n\n// Scroll container in row direction: width FitContent is skipped for the\n// main axis (row) in scroll containers, matching legacy behavior.\nTEST_P(YGFlexBasisFitContentTest, row_scroll_skips_width) {\n  root_ = YGNodeNewWithConfig(config_);\n  YGNodeStyleSetFlexDirection(root_, YGFlexDirectionRow);\n  YGNodeStyleSetOverflow(root_, YGOverflowScroll);\n  YGNodeStyleSetWidth(root_, 100);\n  YGNodeStyleSetHeight(root_, 100);\n\n  YGNodeRef text = YGNodeNewWithConfig(config_);\n  YGNodeSetMeasureFunc(text, measureTextLike);\n  YGNodeInsertChild(root_, text, 0);\n\n  YGNodeCalculateLayout(root_, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(text));\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    YogaTest,\n    YGFlexBasisFitContentTest,\n    testing::Values(false, true));\n\n// Feature toggle invalidates layout cache.\nTEST(YogaTest, flex_basis_fit_content_feature_change_invalidates_cache) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetExperimentalFeatureEnabled(\n      config, YGExperimentalFeatureFixFlexBasisFitContent, false);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef container = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(container, 1);\n  YGNodeInsertChild(root, container, 0);\n\n  YGNodeRef child = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(child, 50);\n  YGNodeInsertChild(container, child, 0);\n\n  YGNodeRef fixed = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(fixed, 100);\n  YGNodeInsertChild(root, fixed, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  float heightBefore = YGNodeLayoutGetHeight(container);\n\n  YGConfigSetExperimentalFeatureEnabled(\n      config, YGExperimentalFeatureFixFlexBasisFitContent, true);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  float heightAfter = YGNodeLayoutGetHeight(container);\n\n  ASSERT_FLOAT_EQ(heightBefore, heightAfter);\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/YGHadOverflowTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nusing namespace ::testing;\n\nclass YogaTest_HadOverflowTests : public Test {\n protected:\n  YogaTest_HadOverflowTests() : config(YGConfigNew()) {\n    root = YGNodeNewWithConfig(config);\n    YGNodeStyleSetWidth(root, 200);\n    YGNodeStyleSetHeight(root, 100);\n    YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n    YGNodeStyleSetFlexWrap(root, YGWrapNoWrap);\n  }\n\n  ~YogaTest_HadOverflowTests() override {\n    YGNodeFreeRecursive(root);\n    YGConfigFree(config);\n  }\n\n  YGNodeRef root;\n  YGConfigRef config;\n};\n\nTEST_F(\n    YogaTest_HadOverflowTests,\n    children_overflow_no_wrap_and_no_flex_children) {\n  YGNodeRef child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child0, 80);\n  YGNodeStyleSetHeight(child0, 40);\n  YGNodeStyleSetMargin(child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(child0, YGEdgeBottom, 15);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeRef child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1, 80);\n  YGNodeStyleSetHeight(child1, 40);\n  YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);\n  YGNodeInsertChild(root, child1, 1);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));\n}\n\nTEST_F(\n    YogaTest_HadOverflowTests,\n    spacing_overflow_no_wrap_and_no_flex_children) {\n  YGNodeRef child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child0, 80);\n  YGNodeStyleSetHeight(child0, 40);\n  YGNodeStyleSetMargin(child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeRef child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1, 80);\n  YGNodeStyleSetHeight(child1, 40);\n  YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);\n  YGNodeInsertChild(root, child1, 1);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));\n}\n\nTEST_F(YogaTest_HadOverflowTests, no_overflow_no_wrap_and_flex_children) {\n  YGNodeRef child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child0, 80);\n  YGNodeStyleSetHeight(child0, 40);\n  YGNodeStyleSetMargin(child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeRef child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1, 80);\n  YGNodeStyleSetHeight(child1, 40);\n  YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);\n  YGNodeStyleSetFlexShrink(child1, 1);\n  YGNodeInsertChild(root, child1, 1);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_FALSE(YGNodeLayoutGetHadOverflow(root));\n}\n\nTEST_F(YogaTest_HadOverflowTests, hadOverflow_gets_reset_if_not_logger_valid) {\n  YGNodeRef child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child0, 80);\n  YGNodeStyleSetHeight(child0, 40);\n  YGNodeStyleSetMargin(child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeRef child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1, 80);\n  YGNodeStyleSetHeight(child1, 40);\n  YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);\n  YGNodeInsertChild(root, child1, 1);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));\n\n  YGNodeStyleSetFlexShrink(child1, 1);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_FALSE(YGNodeLayoutGetHadOverflow(root));\n}\n\nTEST_F(YogaTest_HadOverflowTests, spacing_overflow_in_nested_nodes) {\n  YGNodeRef child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child0, 80);\n  YGNodeStyleSetHeight(child0, 40);\n  YGNodeStyleSetMargin(child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, child0, 0);\n  YGNodeRef child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1, 80);\n  YGNodeStyleSetHeight(child1, 40);\n  YGNodeInsertChild(root, child1, 1);\n  YGNodeRef child1_1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(child1_1, 80);\n  YGNodeStyleSetHeight(child1_1, 40);\n  YGNodeStyleSetMargin(child1_1, YGEdgeBottom, 5);\n  YGNodeInsertChild(child1, child1_1, 0);\n\n  YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);\n\n  ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));\n}\n"
  },
  {
    "path": "tests/YGLayoutableChildrenTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n#include <cstdio>\n\nTEST(YogaTest, layoutable_children_single_contents_node) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeRef root_child2 = YGNodeNew();\n\n  YGNodeRef root_grandchild0 = YGNodeNew();\n  YGNodeRef root_grandchild1 = YGNodeNew();\n\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeInsertChild(root_child1, root_grandchild0, 0);\n  YGNodeInsertChild(root_child1, root_grandchild1, 1);\n\n  YGNodeStyleSetDisplay(root_child1, YGDisplayContents);\n\n  std::vector<facebook::yoga::Node*> order = {\n      facebook::yoga::resolveRef(root_child0),\n      facebook::yoga::resolveRef(root_grandchild0),\n      facebook::yoga::resolveRef(root_grandchild1),\n      facebook::yoga::resolveRef(root_child2),\n  };\n  auto correctOrderIt = order.begin();\n\n  for (auto node : facebook::yoga::resolveRef(root)->getLayoutChildren()) {\n    ASSERT_EQ(node, *correctOrderIt);\n    correctOrderIt++;\n  }\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, layoutable_children_multiple_contents_nodes) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeRef root_child2 = YGNodeNew();\n\n  YGNodeRef root_grandchild0 = YGNodeNew();\n  YGNodeRef root_grandchild1 = YGNodeNew();\n  YGNodeRef root_grandchild2 = YGNodeNew();\n  YGNodeRef root_grandchild3 = YGNodeNew();\n  YGNodeRef root_grandchild4 = YGNodeNew();\n  YGNodeRef root_grandchild5 = YGNodeNew();\n\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeInsertChild(root_child0, root_grandchild0, 0);\n  YGNodeInsertChild(root_child0, root_grandchild1, 1);\n  YGNodeInsertChild(root_child1, root_grandchild2, 0);\n  YGNodeInsertChild(root_child1, root_grandchild3, 1);\n  YGNodeInsertChild(root_child2, root_grandchild4, 0);\n  YGNodeInsertChild(root_child2, root_grandchild5, 1);\n\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayContents);\n  YGNodeStyleSetDisplay(root_child2, YGDisplayContents);\n\n  std::vector<facebook::yoga::Node*> order = {\n      facebook::yoga::resolveRef(root_grandchild0),\n      facebook::yoga::resolveRef(root_grandchild1),\n      facebook::yoga::resolveRef(root_grandchild2),\n      facebook::yoga::resolveRef(root_grandchild3),\n      facebook::yoga::resolveRef(root_grandchild4),\n      facebook::yoga::resolveRef(root_grandchild5),\n  };\n  auto correctOrderIt = order.begin();\n\n  for (auto node : facebook::yoga::resolveRef(root)->getLayoutChildren()) {\n    ASSERT_EQ(node, *correctOrderIt);\n    correctOrderIt++;\n  }\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, layoutable_children_nested_contents_nodes) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeRef root_child2 = YGNodeNew();\n\n  YGNodeRef root_grandchild0 = YGNodeNew();\n  YGNodeRef root_grandchild1 = YGNodeNew();\n\n  YGNodeRef root_great_grandchild0 = YGNodeNew();\n  YGNodeRef root_great_grandchild1 = YGNodeNew();\n\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeInsertChild(root_child1, root_grandchild0, 0);\n  YGNodeInsertChild(root_child1, root_grandchild1, 1);\n\n  YGNodeInsertChild(root_grandchild1, root_great_grandchild0, 0);\n  YGNodeInsertChild(root_grandchild1, root_great_grandchild1, 1);\n\n  YGNodeStyleSetDisplay(root_child1, YGDisplayContents);\n  YGNodeStyleSetDisplay(root_grandchild1, YGDisplayContents);\n\n  std::vector<facebook::yoga::Node*> order = {\n      facebook::yoga::resolveRef(root_child0),\n      facebook::yoga::resolveRef(root_grandchild0),\n      facebook::yoga::resolveRef(root_great_grandchild0),\n      facebook::yoga::resolveRef(root_great_grandchild1),\n      facebook::yoga::resolveRef(root_child2),\n  };\n  auto correctOrderIt = order.begin();\n\n  for (auto node : facebook::yoga::resolveRef(root)->getLayoutChildren()) {\n    ASSERT_EQ(node, *correctOrderIt);\n    correctOrderIt++;\n  }\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, layoutable_children_contents_leaf_node) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeRef root_child2 = YGNodeNew();\n\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeStyleSetDisplay(root_child1, YGDisplayContents);\n\n  std::vector<facebook::yoga::Node*> order = {\n      facebook::yoga::resolveRef(root_child0),\n      facebook::yoga::resolveRef(root_child2),\n  };\n  auto correctOrderIt = order.begin();\n\n  for (auto node : facebook::yoga::resolveRef(root)->getLayoutChildren()) {\n    ASSERT_EQ(node, *correctOrderIt);\n    correctOrderIt++;\n  }\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, layoutable_children_contents_root_node) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeRef root_child1 = YGNodeNew();\n  YGNodeRef root_child2 = YGNodeNew();\n\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeStyleSetDisplay(root, YGDisplayContents);\n\n  std::vector<facebook::yoga::Node*> order = {\n      facebook::yoga::resolveRef(root_child0),\n      facebook::yoga::resolveRef(root_child1),\n      facebook::yoga::resolveRef(root_child2),\n  };\n  auto correctOrderIt = order.begin();\n\n  for (auto node : facebook::yoga::resolveRef(root)->getLayoutChildren()) {\n    ASSERT_EQ(node, *correctOrderIt);\n    correctOrderIt++;\n  }\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGMeasureCacheTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic YGSize _measureMax(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  int* measureCount = (int*)YGNodeGetContext(node);\n  (*measureCount)++;\n\n  return YGSize{\n      widthMode == YGMeasureModeUndefined ? 10 : width,\n      heightMode == YGMeasureModeUndefined ? 10 : height,\n  };\n}\n\nstatic YGSize _measureMin(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  int* measureCount = (int*)YGNodeGetContext(node);\n  *measureCount = *measureCount + 1;\n  return YGSize{\n      widthMode == YGMeasureModeUndefined ||\n              (widthMode == YGMeasureModeAtMost && width > 10)\n          ? 10\n          : width,\n      heightMode == YGMeasureModeUndefined ||\n              (heightMode == YGMeasureModeAtMost && height > 10)\n          ? 10\n          : height,\n  };\n}\n\nstatic YGSize _measure_84_49(\n    YGNodeConstRef node,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  int* measureCount = (int*)YGNodeGetContext(node);\n  if (measureCount != nullptr) {\n    (*measureCount)++;\n  }\n\n  return YGSize{84.f, 49.f};\n}\n\nTEST(YogaTest, measure_once_single_flexible_child) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  int measureCount = 0;\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measureMax);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, remeasure_with_same_exact_width_larger_than_needed_height) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  int measureCount = 0;\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measureMin);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n  YGNodeCalculateLayout(root, 100, 50, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, remeasure_with_same_atmost_width_larger_than_needed_height) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  int measureCount = 0;\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measureMin);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n  YGNodeCalculateLayout(root, 100, 50, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, remeasure_with_computed_width_larger_than_needed_height) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  int measureCount = 0;\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measureMin);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n  YGNodeStyleSetAlignItems(root, YGAlignStretch);\n  YGNodeCalculateLayout(root, 10, 50, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, remeasure_with_atmost_computed_width_undefined_height) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  int measureCount = 0;\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measureMin);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, YGUndefined, YGDirectionLTR);\n  YGNodeCalculateLayout(root, 10, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(\n    YogaTest,\n    remeasure_with_already_measured_value_smaller_but_still_float_equal) {\n  int measureCount = 0;\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 288.f);\n  YGNodeStyleSetHeight(root, 288.f);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 2.88f);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0_child0, _measure_84_49);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeFreeRecursive(root);\n\n  ASSERT_EQ(1, measureCount);\n}\n"
  },
  {
    "path": "tests/YGMeasureModeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstruct _MeasureConstraint {\n  float width;\n  YGMeasureMode widthMode;\n  float height;\n  YGMeasureMode heightMode;\n};\n\nstruct _MeasureConstraintList {\n  uint32_t length;\n  struct _MeasureConstraint* constraints;\n};\n\nstatic YGSize _measure(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  auto* constraintList = (struct _MeasureConstraintList*)YGNodeGetContext(node);\n  struct _MeasureConstraint* constraints = constraintList->constraints;\n  uint32_t currentIndex = constraintList->length;\n  (&constraints[currentIndex])->width = width;\n  (&constraints[currentIndex])->widthMode = widthMode;\n  (&constraints[currentIndex])->height = height;\n  (&constraints[currentIndex])->heightMode = heightMode;\n  constraintList->length = currentIndex + 1;\n\n  return YGSize{\n      widthMode == YGMeasureModeUndefined ? 10 : width,\n      heightMode == YGMeasureModeUndefined ? 10 : width,\n  };\n}\n\nTEST(YogaTest, exactly_measure_stretched_child_column) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width);\n  ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].widthMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, exactly_measure_stretched_child_row) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, at_most_main_axis_column) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, at_most_cross_axis_column) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, at_most_main_axis_row) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, at_most_cross_axis_row) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, flex_child) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(2u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[1].height);\n  ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[1].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, flex_child_with_flex_basis) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 0);\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, overflow_scroll_column) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetOverflow(root, YGOverflowScroll);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode);\n\n  ASSERT_TRUE(YGFloatIsUndefined(constraintList.constraints[0].height));\n  ASSERT_EQ(YGMeasureModeUndefined, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, overflow_scroll_row) {\n  auto constraintList = _MeasureConstraintList{\n      .length = 0,\n      .constraints = (struct _MeasureConstraint*)malloc(\n          10 * sizeof(struct _MeasureConstraint)),\n  };\n\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetOverflow(root, YGOverflowScroll);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &constraintList);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1u, constraintList.length);\n\n  ASSERT_TRUE(YGFloatIsUndefined(constraintList.constraints[0].width));\n  ASSERT_EQ(YGMeasureModeUndefined, constraintList.constraints[0].widthMode);\n\n  ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height);\n  ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode);\n\n  free(constraintList.constraints);\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGMeasureTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic YGSize _measure(\n    YGNodeConstRef node,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  int* measureCount = (int*)YGNodeGetContext(node);\n  if (measureCount != nullptr) {\n    (*measureCount)++;\n  }\n\n  return YGSize{10, 10};\n}\n\nstatic YGSize _simulate_wrapping_text(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode widthMode,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  if (widthMode == YGMeasureModeUndefined || width >= 68) {\n    return YGSize{68, 16};\n  }\n\n  return YGSize{50, 32};\n}\n\nstatic YGSize _measure_assert_negative(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode /*widthMode*/,\n    float height,\n    YGMeasureMode /*heightMode*/) {\n  EXPECT_GE(width, 0);\n  EXPECT_GE(height, 0);\n\n  return YGSize{0, 0};\n}\n\nTEST(YogaTest, dont_measure_single_grow_shrink_child) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_absolute_child_with_no_constraints) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeInsertChild(root, root_child0, 0);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeSetContext(root_child0_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0_child0, _measure);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dont_measure_when_min_equals_max) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetMinWidth(root_child0, 10);\n  YGNodeStyleSetMaxWidth(root_child0, 10);\n  YGNodeStyleSetMinHeight(root_child0, 10);\n  YGNodeStyleSetMaxHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, measureCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dont_measure_when_min_equals_max_percentages) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetMinWidthPercent(root_child0, 10);\n  YGNodeStyleSetMaxWidthPercent(root_child0, 10);\n  YGNodeStyleSetMinHeightPercent(root_child0, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, measureCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_nodes_with_margin_auto_and_stretch) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_EQ(490, YGNodeLayoutGetLeft(root_child0));\n  EXPECT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  EXPECT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  EXPECT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dont_measure_when_min_equals_max_mixed_width_percent) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetMinWidthPercent(root_child0, 10);\n  YGNodeStyleSetMaxWidthPercent(root_child0, 10);\n  YGNodeStyleSetMinHeight(root_child0, 10);\n  YGNodeStyleSetMaxHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, measureCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, dont_measure_when_min_equals_max_mixed_height_percent) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n  YGNodeStyleSetMinWidth(root_child0, 10);\n  YGNodeStyleSetMaxWidth(root_child0, 10);\n  YGNodeStyleSetMinHeightPercent(root_child0, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, measureCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_enough_size_should_be_in_single_line) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(68, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_not_enough_size_should_wrap) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 55);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);\n  //  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_zero_space_should_grow) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetFlexGrow(root, 0);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumn);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure);\n\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 282, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(282, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_flex_direction_row_and_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 25);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 25);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 25);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 25);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_flex_direction_column_and_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 25);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  //  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(57, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_flex_direction_row_no_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  //  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_flex_direction_row_no_padding_align_items_flexstart) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_with_fixed_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 25);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_with_flex_shrink) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 25);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, measure_no_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 5);\n  YGNodeStyleSetHeight(root_child1, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(32, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\n#if GTEST_HAS_DEATH_TEST\nTEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeSetMeasureFunc(root, _measure);\n\n  YGNodeRef root_child0 = YGNodeNew();\n#if defined(__cpp_exceptions)\n  ASSERT_THROW(YGNodeInsertChild(root, root_child0, 0), std::logic_error);\n#else // !defined(__cpp_exceptions)\n  ASSERT_DEATH(YGNodeInsertChild(root, root_child0, 0), \"Cannot add child.*\");\n#endif // defined(__cpp_exceptions)\n  YGNodeFree(root_child0);\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaDeathTest, cannot_add_nonnull_measure_func_to_non_leaf_node) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeInsertChild(root, root_child0, 0);\n#if defined(__cpp_exceptions)\n  ASSERT_THROW(YGNodeSetMeasureFunc(root, _measure), std::logic_error);\n#else // !defined(__cpp_exceptions)\n  ASSERT_DEATH(\n      YGNodeSetMeasureFunc(root, _measure), \"Cannot set measure function.*\");\n#endif // defined(__cpp_exceptions)\n  YGNodeFreeRecursive(root);\n}\n\n#endif\n\nTEST(YogaTest, can_nullify_measure_func_on_any_node) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeInsertChild(root, YGNodeNew(), 0);\n  YGNodeSetMeasureFunc(root, nullptr);\n  ASSERT_TRUE(!YGNodeHasMeasureFunc(root));\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, cant_call_negative_measure) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, cant_call_negative_measure_horizontal) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 10);\n  YGNodeStyleSetHeight(root, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);\n  YGNodeStyleSetMargin(root_child0, YGEdgeStart, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n\nstatic YGSize _measure_90_10(\n    YGNodeConstRef /*node*/,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{90, 10};\n}\n\nstatic YGSize _measure_100_100(\n    YGNodeConstRef /*node*/,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{100, 100};\n}\n\nTEST(YogaTest, percent_with_text_node) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 80);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child1, _measure_90_10);\n  YGNodeStyleSetMaxWidthPercent(root_child1, 50);\n  YGNodeStyleSetPaddingPercent(root_child1, YGEdgeTop, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_margin_with_measure_func) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 0);\n  YGNodeSetMeasureFunc(root_child0, _measure_100_100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetMargin(root_child1, YGEdgeTop, 100);\n  YGNodeSetMeasureFunc(root_child1, _measure_100_100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10);\n  YGNodeSetMeasureFunc(root_child2, _measure_100_100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20);\n  YGNodeSetMeasureFunc(root_child3, _measure_100_100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_padding_with_measure_func) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0);\n  YGNodeSetMeasureFunc(root_child0, _measure_100_100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100);\n  YGNodeSetMeasureFunc(root_child1, _measure_100_100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10);\n  YGNodeSetMeasureFunc(root_child2, _measure_100_100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20);\n  YGNodeSetMeasureFunc(root_child3, _measure_100_100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_padding_and_percent_margin_with_measure_func) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexStart);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0);\n  YGNodeSetMeasureFunc(root_child0, _measure_100_100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100);\n  YGNodeSetMeasureFunc(root_child1, _measure_100_100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10);\n  YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10);\n  YGNodeSetMeasureFunc(root_child2, _measure_100_100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20);\n  YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20);\n  YGNodeSetMeasureFunc(root_child3, _measure_100_100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nstatic YGSize _measure_half_width_height(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode /*widthMode*/,\n    float height,\n    YGMeasureMode /*heightMode*/) {\n  int* measureCount = (int*)YGNodeGetContext(node);\n  if (measureCount != nullptr) {\n    (*measureCount)++;\n  }\n\n  return YGSize{0.5f * width, 0.5f * height};\n}\n\nTEST(YogaTest, measure_content_box) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure_half_width_height);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_EQ(130, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(230, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, measure_border_box) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingBorderBox);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  int measureCount = 0;\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeSetContext(root_child0, &measureCount);\n  YGNodeSetMeasureFunc(root_child0, _measure_half_width_height);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(1, measureCount);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(70, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(85, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGNodeCallbackTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/node/Node.h>\n#include <ostream>\n\nusing namespace facebook::yoga;\n\ninline bool operator==(const YGSize& lhs, const YGSize& rhs) {\n  return lhs.width == rhs.width && lhs.height == rhs.height;\n}\n\nTEST(Node, hasMeasureFunc_initial) {\n  auto n = Node{};\n  ASSERT_FALSE(n.hasMeasureFunc());\n}\n\nTEST(Node, hasMeasureFunc_with_measure_fn) {\n  auto n = Node{};\n  n.setMeasureFunc(\n      [](YGNodeConstRef, float, YGMeasureMode, float, YGMeasureMode) {\n        return YGSize{};\n      });\n  ASSERT_TRUE(n.hasMeasureFunc());\n}\n\nTEST(Node, measure_with_measure_fn) {\n  auto n = Node{};\n\n  n.setMeasureFunc(\n      [](YGNodeConstRef, float w, YGMeasureMode wm, float h, YGMeasureMode hm) {\n        return YGSize{w * static_cast<float>(wm), h / static_cast<float>(hm)};\n      });\n\n  ASSERT_EQ(\n      n.measure(23, MeasureMode::Exactly, 24, MeasureMode::AtMost),\n      (YGSize{23, 12}));\n}\n\nTEST(Node, hasMeasureFunc_after_unset) {\n  auto n = Node{};\n  n.setMeasureFunc(\n      [](YGNodeConstRef, float, YGMeasureMode, float, YGMeasureMode) {\n        return YGSize{};\n      });\n\n  n.setMeasureFunc(nullptr);\n  ASSERT_FALSE(n.hasMeasureFunc());\n}\n\nTEST(Node, hasBaselineFunc_initial) {\n  auto n = Node{};\n  ASSERT_FALSE(n.hasBaselineFunc());\n}\n\nTEST(Node, hasBaselineFunc_with_baseline_fn) {\n  auto n = Node{};\n  n.setBaselineFunc([](YGNodeConstRef, float, float) { return 0.0f; });\n  ASSERT_TRUE(n.hasBaselineFunc());\n}\n\nTEST(Node, baseline_with_baseline_fn) {\n  auto n = Node{};\n  n.setBaselineFunc([](YGNodeConstRef, float w, float h) { return w + h; });\n\n  ASSERT_EQ(n.baseline(1.25f, 2.5f), 3.75f);\n}\n\nTEST(Node, hasBaselineFunc_after_unset) {\n  auto n = Node{};\n  n.setBaselineFunc([](YGNodeConstRef, float, float) { return 0.0f; });\n\n  n.setBaselineFunc(nullptr);\n  ASSERT_FALSE(n.hasBaselineFunc());\n}\n"
  },
  {
    "path": "tests/YGNodeChildTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, reset_layout_when_child_removed) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeRemoveChild(root, root_child0);\n\n  ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetWidth(root_child0)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetHeight(root_child0)));\n\n  YGNodeFreeRecursive(root);\n  YGNodeFreeRecursive(root_child0);\n}\n\nTEST(YogaTest, removed_child_can_be_reused_with_valid_layout) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef child = YGNodeNew();\n  YGNodeStyleSetWidth(child, 100);\n  YGNodeStyleSetHeight(child, 100);\n  YGNodeInsertChild(root, child, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(child));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(child));\n\n  // Remove child - layout should be cleared and child marked dirty\n  YGNodeRemoveChild(root, child);\n\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetWidth(child)));\n  ASSERT_TRUE(YGFloatIsUndefined(YGNodeLayoutGetHeight(child)));\n  ASSERT_TRUE(YGNodeIsDirty(child));\n\n  // Reinsert the child and recalculate - layout should be valid again\n  YGNodeInsertChild(root, child, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(100, YGNodeLayoutGetWidth(child));\n  ASSERT_EQ(100, YGNodeLayoutGetHeight(child));\n  ASSERT_FALSE(YGNodeIsDirty(child));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGPersistenceTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n\n#include \"util/TestUtil.h\"\n\nusing namespace facebook;\nusing facebook::yoga::test::TestUtil;\n\nTEST(YogaTest, cloning_shared_root) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeRef root2 = YGNodeClone(root);\n  YGNodeStyleSetWidth(root2, 100);\n\n  ASSERT_EQ(2u, YGNodeGetChildCount(root2));\n  // The children should have referential equality at this point.\n  ASSERT_EQ(root_child0, YGNodeGetChild(root2, 0));\n  ASSERT_EQ(root_child1, YGNodeGetChild(root2, 1));\n\n  YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(2u, YGNodeGetChildCount(root2));\n  // Relayout with no changed input should result in referential equality.\n  ASSERT_EQ(root_child0, YGNodeGetChild(root2, 0));\n  ASSERT_EQ(root_child1, YGNodeGetChild(root2, 1));\n\n  YGNodeStyleSetWidth(root2, 150);\n  YGNodeStyleSetHeight(root2, 200);\n  YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(2u, YGNodeGetChildCount(root2));\n  // Relayout with changed input should result in cloned children.\n  YGNodeRef root2_child0 = YGNodeGetChild(root2, 0);\n  YGNodeRef root2_child1 = YGNodeGetChild(root2, 1);\n  ASSERT_NE(root_child0, root2_child0);\n  ASSERT_NE(root_child1, root2_child1);\n\n  // Everything in the root should remain unchanged.\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  // The new root now has new layout.\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root2_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root2_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetHeight(root2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root2_child1));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root2_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root2_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root2_child1));\n\n  YGNodeFreeRecursive(root2);\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, mutating_children_of_a_clone_clones_only_after_layout) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  ASSERT_EQ(0u, YGNodeGetChildCount(root));\n\n  YGNodeRef root2 = YGNodeClone(root);\n  ASSERT_EQ(0u, YGNodeGetChildCount(root2));\n\n  YGNodeRef root2_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root2, root2_child0, 0);\n\n  ASSERT_EQ(0u, YGNodeGetChildCount(root));\n  ASSERT_EQ(1u, YGNodeGetChildCount(root2));\n\n  YGNodeRef root3 = YGNodeClone(root2);\n  ASSERT_EQ(1u, YGNodeGetChildCount(root2));\n  ASSERT_EQ(1u, YGNodeGetChildCount(root3));\n  ASSERT_EQ(YGNodeGetChild(root2, 0), YGNodeGetChild(root3, 0));\n\n  YGNodeRef root3_child1 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root3, root3_child1, 1);\n  ASSERT_EQ(1u, YGNodeGetChildCount(root2));\n  ASSERT_EQ(2u, YGNodeGetChildCount(root3));\n  ASSERT_EQ(root3_child1, YGNodeGetChild(root3, 1));\n  ASSERT_EQ(YGNodeGetChild(root2, 0), YGNodeGetChild(root3, 0));\n\n  YGNodeRef root4 = YGNodeClone(root3);\n  ASSERT_EQ(root3_child1, YGNodeGetChild(root4, 1));\n\n  YGNodeRemoveChild(root4, root3_child1);\n  ASSERT_EQ(2u, YGNodeGetChildCount(root3));\n  ASSERT_EQ(1u, YGNodeGetChildCount(root4));\n  ASSERT_EQ(YGNodeGetChild(root3, 0), YGNodeGetChild(root4, 0));\n\n  YGNodeCalculateLayout(root4, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_NE(YGNodeGetChild(root3, 0), YGNodeGetChild(root4, 0));\n  YGNodeCalculateLayout(root3, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_NE(YGNodeGetChild(root2, 0), YGNodeGetChild(root3, 0));\n\n  YGNodeFreeRecursive(root4);\n  YGNodeFreeRecursive(root3);\n  YGNodeFreeRecursive(root2);\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, cloning_two_levels) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1_0, 10);\n  YGNodeStyleSetFlexGrow(root_child1_0, 1);\n  YGNodeInsertChild(root_child1, root_child1_0, 0);\n\n  YGNodeRef root_child1_1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1_1, 25);\n  YGNodeInsertChild(root_child1, root_child1_1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetHeight(root_child1_0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1_1));\n\n  YGNodeRef root2_child0 = YGNodeClone(root_child0);\n  YGNodeRef root2_child1 = YGNodeClone(root_child1);\n  YGNodeRef root2 = YGNodeClone(root);\n\n  YGNodeStyleSetFlexGrow(root2_child0, 0);\n  YGNodeStyleSetFlexBasis(root2_child0, 40);\n\n  YGNodeRemoveAllChildren(root2);\n  YGNodeInsertChild(root2, root2_child0, 0);\n  YGNodeInsertChild(root2, root2_child1, 1);\n  ASSERT_EQ(2u, YGNodeGetChildCount(root2));\n\n  YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  // Original root is unchanged\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetHeight(root_child1_0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1_1));\n\n  // New root has new layout at the top\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root2_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root2_child1));\n\n  // The deeper children are untouched.\n  ASSERT_EQ(YGNodeGetChild(root2_child1, 0), root_child1_0);\n  ASSERT_EQ(YGNodeGetChild(root2_child1, 1), root_child1_1);\n\n  YGNodeFreeRecursive(root2);\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, cloning_and_freeing) {\n  TestUtil::startCountingNodes();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeRef root2 = YGNodeClone(root);\n\n  // Freeing the original root should be safe as long as we don't free its\n  // children.\n  YGNodeFree(root);\n\n  YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeFreeRecursive(root2);\n\n  YGNodeFree(root_child0);\n  YGNodeFree(root_child1);\n\n  YGConfigFree(config);\n\n  ASSERT_EQ(0, TestUtil::stopCountingNodes());\n}\n\nTEST(YogaTest, mixed_shared_and_owned_children) {\n  // Don't try this at home!\n\n  YGNodeRef root0 = YGNodeNew();\n  YGNodeRef root1 = YGNodeNew();\n\n  YGNodeRef root0_child0 = YGNodeNew();\n  YGNodeRef root0_child0_0 = YGNodeNew();\n  YGNodeInsertChild(root0, root0_child0, 0);\n  YGNodeInsertChild(root0_child0, root0_child0_0, 0);\n\n  YGNodeRef root1_child0 = YGNodeNew();\n  YGNodeRef root1_child2 = YGNodeNew();\n  YGNodeInsertChild(root1, root1_child0, 0);\n  YGNodeInsertChild(root1, root1_child2, 1);\n\n  auto children = static_cast<yoga::Node*>(root1)->getChildren();\n  children.insert(children.begin() + 1, static_cast<yoga::Node*>(root0_child0));\n  static_cast<yoga::Node*>(root1)->setChildren(children);\n\n  auto secondChild = YGNodeGetChild(root1, 1);\n  ASSERT_EQ(secondChild, YGNodeGetChild(root0, 0));\n  ASSERT_EQ(YGNodeGetChild(secondChild, 0), YGNodeGetChild(root0_child0, 0));\n\n  YGNodeCalculateLayout(root1, YGUndefined, YGUndefined, YGDirectionLTR);\n  secondChild = YGNodeGetChild(root1, 1);\n  ASSERT_NE(secondChild, YGNodeGetChild(root0, 0));\n  ASSERT_EQ(YGNodeGetOwner(secondChild), root1);\n  ASSERT_NE(YGNodeGetChild(secondChild, 0), YGNodeGetChild(root0_child0, 0));\n  ASSERT_EQ(YGNodeGetOwner(YGNodeGetChild(secondChild, 0)), secondChild);\n}\n"
  },
  {
    "path": "tests/YGPersistentNodeCloningTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include <yoga/config/Config.h>\n#include <yoga/node/Node.h>\n\n#include <functional>\n#include <memory>\n#include <vector>\n\nnamespace facebook::yoga {\n\nstruct YGPersistentNodeCloningTest : public ::testing::Test {\n  struct NodeWrapper {\n    explicit NodeWrapper(\n        YGConfigRef config,\n        std::vector<std::shared_ptr<NodeWrapper>> children = {})\n        : node{YGNodeNewWithConfig(config)}, children{std::move(children)} {\n      YGNodeSetContext(node, this);\n\n      auto privateNode = resolveRef(node);\n      for (const auto& child : this->children) {\n        auto privateChild = resolveRef(child->node);\n        // Claim first ownership of not yet owned nodes, to avoid immediately\n        // cloning them\n        if (YGNodeGetOwner(child->node) == nullptr) {\n          privateChild->setOwner(privateNode);\n        }\n        privateNode->insertChild(privateChild, privateNode->getChildCount());\n      }\n    }\n\n    // Clone, with current children, for mutation\n    NodeWrapper(const NodeWrapper& other)\n        : node{YGNodeClone(other.node)}, children{other.children} {\n      YGNodeSetContext(node, this);\n\n      auto privateNode = resolveRef(node);\n      privateNode->setOwner(nullptr);\n    }\n\n    // Clone, with new children\n    NodeWrapper(\n        const NodeWrapper& other,\n        std::vector<std::shared_ptr<NodeWrapper>> children)\n        : node{YGNodeClone(other.node)}, children{std::move(children)} {\n      YGNodeSetContext(node, this);\n\n      auto privateNode = resolveRef(node);\n      privateNode->setOwner(nullptr);\n      privateNode->setChildren({});\n      privateNode->setDirty(true);\n\n      for (const auto& child : this->children) {\n        auto privateChild = resolveRef(child->node);\n        // Claim first ownership of not yet owned nodes, to avoid immediately\n        // cloning them\n        if (YGNodeGetOwner(child->node) == nullptr) {\n          privateChild->setOwner(privateNode);\n        }\n        privateNode->insertChild(privateChild, privateNode->getChildCount());\n      }\n    }\n\n    NodeWrapper(NodeWrapper&&) = delete;\n\n    ~NodeWrapper() {\n      YGNodeFree(node);\n    }\n\n    NodeWrapper& operator=(const NodeWrapper& other) = delete;\n    NodeWrapper& operator=(NodeWrapper&& other) = delete;\n\n    YGNodeRef node;\n    std::vector<std::shared_ptr<NodeWrapper>> children;\n  };\n\n  struct ConfigWrapper {\n    ConfigWrapper() {\n      YGConfigSetCloneNodeFunc(\n          config,\n          [](YGNodeConstRef oldNode, YGNodeConstRef owner, size_t childIndex) {\n            onClone(oldNode, owner, childIndex);\n            auto wrapper = static_cast<NodeWrapper*>(YGNodeGetContext(owner));\n            auto old = static_cast<NodeWrapper*>(YGNodeGetContext(oldNode));\n\n            wrapper->children[childIndex] = std::make_shared<NodeWrapper>(*old);\n            return wrapper->children[childIndex]->node;\n          });\n    }\n\n    ConfigWrapper(const ConfigWrapper&) = delete;\n    ConfigWrapper(ConfigWrapper&&) = delete;\n\n    ~ConfigWrapper() {\n      YGConfigFree(config);\n    }\n\n    ConfigWrapper& operator=(const ConfigWrapper&) = delete;\n    ConfigWrapper& operator=(ConfigWrapper&&) = delete;\n\n    YGConfigRef config{YGConfigNew()};\n  };\n\n  ConfigWrapper configWrapper;\n  YGConfigRef config{configWrapper.config};\n\n  void SetUp() override {\n    onClone = [](...) {};\n  }\n\n  // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)\n  static inline std::function<void(YGNodeConstRef, YGNodeConstRef, size_t)>\n      onClone;\n};\n\nTEST_F(\n    YGPersistentNodeCloningTest,\n    changing_sibling_height_does_not_clone_neighbors) {\n  // <ScrollView>\n  //   <View id=\"Sibling\" style={{ height: 1 }} />\n  //   <View id=\"A\" style={{ height: 1 }}>\n  //     <View id=\"B\">\n  //       <View id=\"C\">\n  //         <View id=\"D\"/>\n  //       </View>\n  //     </View>\n  //   </View>\n  // </ScrollView>\n\n  auto sibling = std::make_shared<NodeWrapper>(config);\n  YGNodeStyleSetHeight(sibling->node, 1);\n\n  auto d = std::make_shared<NodeWrapper>(config);\n  auto c = std::make_shared<NodeWrapper>(config, std::vector{d});\n  auto b = std::make_shared<NodeWrapper>(config, std::vector{c});\n  auto a = std::make_shared<NodeWrapper>(config, std::vector{b});\n  YGNodeStyleSetHeight(a->node, 1);\n\n  auto scrollContentView =\n      std::make_shared<NodeWrapper>(config, std::vector{sibling, a});\n  YGNodeStyleSetPositionType(scrollContentView->node, YGPositionTypeAbsolute);\n\n  auto scrollView =\n      std::make_shared<NodeWrapper>(config, std::vector{scrollContentView});\n  YGNodeStyleSetWidth(scrollView->node, 100);\n  YGNodeStyleSetHeight(scrollView->node, 100);\n\n  // We don't expect any cloning during the first layout\n  onClone = [](...) { FAIL(); };\n\n  YGNodeCalculateLayout(\n      scrollView->node, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  auto siblingPrime = std::make_shared<NodeWrapper>(config);\n  YGNodeStyleSetHeight(siblingPrime->node, 2);\n\n  auto scrollContentViewPrime = std::make_shared<NodeWrapper>(\n      *scrollContentView, std::vector{siblingPrime, a});\n  auto scrollViewPrime = std::make_shared<NodeWrapper>(\n      *scrollView, std::vector{scrollContentViewPrime});\n\n  std::vector<NodeWrapper*> nodesCloned;\n  // We should only need to clone \"A\"\n  onClone = [&](YGNodeConstRef oldNode,\n                YGNodeConstRef /*owner*/,\n                size_t /*childIndex*/) {\n    nodesCloned.push_back(static_cast<NodeWrapper*>(YGNodeGetContext(oldNode)));\n  };\n\n  YGNodeCalculateLayout(\n      scrollViewPrime->node, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  EXPECT_EQ(nodesCloned.size(), 1);\n  EXPECT_EQ(nodesCloned[0], a.get());\n}\n\nTEST_F(YGPersistentNodeCloningTest, clone_leaf_display_contents_node) {\n  // <View id=\"A\">\n  //   <View id=\"B\" style={{ display: 'contents' }} />\n  // </View>\n\n  auto b = std::make_shared<NodeWrapper>(config);\n  auto a = std::make_shared<NodeWrapper>(config, std::vector{b});\n  YGNodeStyleSetDisplay(b->node, YGDisplayContents);\n\n  // We don't expect any cloning during the first layout\n  onClone = [](...) { FAIL(); };\n\n  YGNodeCalculateLayout(a->node, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  auto aPrime = std::make_shared<NodeWrapper>(config, std::vector{b});\n\n  std::vector<NodeWrapper*> nodesCloned;\n  // We should clone \"C\"\n  onClone = [&](YGNodeConstRef oldNode,\n                YGNodeConstRef /*owner*/,\n                size_t /*childIndex*/) {\n    nodesCloned.push_back(static_cast<NodeWrapper*>(YGNodeGetContext(oldNode)));\n  };\n\n  YGNodeCalculateLayout(aPrime->node, 100, 100, YGDirectionLTR);\n\n  EXPECT_EQ(nodesCloned.size(), 1);\n  EXPECT_EQ(nodesCloned[0], b.get());\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "tests/YGRelayoutTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, dont_cache_computed_flex_basis_between_layouts) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetExperimentalFeatureEnabled(\n      config, YGExperimentalFeatureWebFlexBasis, true);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root, 100);\n  YGNodeStyleSetWidthPercent(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, 100, YGUndefined, YGDirectionLTR);\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, recalculate_resolvedDimonsion_onchange) {\n  YGNodeRef root = YGNodeNew();\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetMinHeight(root_child0, 10);\n  YGNodeStyleSetMaxHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeStyleSetMinHeight(root_child0, YGUndefined);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, relayout_containing_block_size_changes) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeRelative);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-2, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  // Relayout starts here\n  YGNodeStyleSetWidth(root_child0, 456);\n  YGNodeStyleSetHeight(root_child0, 432);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(469, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(438, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(456, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(432, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(182, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(263, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(469, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(438, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(456, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(432, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(235, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(182, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(263, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, has_new_layout_flag_set_static) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child1, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0_child1, 5);\n  YGNodeStyleSetHeight(root_child0_child1, 5);\n  YGNodeInsertChild(root_child0, root_child0_child1, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0_child0, 5);\n  YGNodeStyleSetHeight(root_child0_child0, 5);\n  YGNodeInsertChild(root_child0, root_child0_child0, 1);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNew();\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 1);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  YGNodeSetHasNewLayout(root, false);\n  YGNodeSetHasNewLayout(root_child0, false);\n  YGNodeSetHasNewLayout(root_child0_child0, false);\n  YGNodeSetHasNewLayout(root_child0_child0_child0, false);\n\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_TRUE(YGNodeGetHasNewLayout(root));\n  ASSERT_TRUE(YGNodeGetHasNewLayout(root_child0));\n  ASSERT_TRUE(YGNodeGetHasNewLayout(root_child0_child0));\n  ASSERT_TRUE(YGNodeGetHasNewLayout(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/YGRoundingFunctionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\n#include <cmath>\n\nTEST(YogaTest, rounding_value) {\n  // Test that whole numbers are rounded to whole despite ceil/floor flags\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.000001, 2.0, false, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.000001, 2.0, true, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.000001, 2.0, false, true));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(5.999999, 2.0, false, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(5.999999, 2.0, true, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(5.999999, 2.0, false, true));\n  // Same tests for negative numbers\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-6.000001, 2.0, false, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-6.000001, 2.0, true, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-6.000001, 2.0, false, true));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.999999, 2.0, false, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.999999, 2.0, true, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.999999, 2.0, false, true));\n\n  // Test that numbers with fraction are rounded correctly accounting for\n  // ceil/floor flags\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.01, 2.0, false, false));\n  ASSERT_FLOAT_EQ(6.5, YGRoundValueToPixelGrid(6.01, 2.0, true, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.01, 2.0, false, true));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(5.99, 2.0, false, false));\n  ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(5.99, 2.0, true, false));\n  ASSERT_FLOAT_EQ(5.5, YGRoundValueToPixelGrid(5.99, 2.0, false, true));\n  // Same tests for negative numbers\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-6.01, 2.0, false, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-6.01, 2.0, true, false));\n  ASSERT_FLOAT_EQ(-6.5, YGRoundValueToPixelGrid(-6.01, 2.0, false, true));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.99, 2.0, false, false));\n  ASSERT_FLOAT_EQ(-5.5, YGRoundValueToPixelGrid(-5.99, 2.0, true, false));\n  ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.99, 2.0, false, true));\n\n  // Rounding up/down halfway values is as expected for both positive and\n  // negative numbers\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.5, 1.0, false, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.4, 1.0, false, false));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.6, 1.0, false, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.499999, 1.0, false, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.500001, 1.0, false, false));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.5001, 1.0, false, false));\n\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.5, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.4, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.6, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.499999, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.500001, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.5001, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.00001, 1.0, true, false));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3, 1.0, true, false));\n\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.5, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.4, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.6, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.499999, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.500001, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-4, YGRoundValueToPixelGrid(-3.5001, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3.00001, 1.0, false, true));\n  ASSERT_FLOAT_EQ(-3, YGRoundValueToPixelGrid(-3, 1.0, false, true));\n\n  // NAN is treated as expected:\n  ASSERT_TRUE(\n      std::isnan(YGRoundValueToPixelGrid(\n          std::numeric_limits<double>::quiet_NaN(), 1.5, false, false)));\n  ASSERT_TRUE(\n      std::isnan(YGRoundValueToPixelGrid(\n          1.5, std::numeric_limits<double>::quiet_NaN(), false, false)));\n  ASSERT_TRUE(\n      std::isnan(YGRoundValueToPixelGrid(\n          std::numeric_limits<double>::quiet_NaN(),\n          std::numeric_limits<double>::quiet_NaN(),\n          false,\n          false)));\n}\n\nstatic YGSize measureText(\n    YGNodeConstRef /*node*/,\n    float /*width*/,\n    YGMeasureMode /*widthMode*/,\n    float /*height*/,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{10, 10};\n}\n\n// Regression test for https://github.com/facebook/yoga/issues/824\nTEST(YogaTest, consistent_rounding_during_repeated_layouts) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetPointScaleFactor(config, 2);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root, YGEdgeTop, -1.49f);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef node0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, node0, 0);\n\n  YGNodeRef node1 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(node1, measureText);\n  YGNodeInsertChild(node0, node1, 0);\n\n  for (int i = 0; i < 5; i++) {\n    // Dirty the tree so YGRoundToPixelGrid runs again\n    YGNodeStyleSetMargin(root, YGEdgeLeft, (float)(i + 1));\n\n    YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n    ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(node1));\n  }\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, per_node_point_scale_factor) {\n  YGConfigRef config1 = YGConfigNew();\n  YGConfigSetPointScaleFactor(config1, 2);\n\n  YGConfigRef config2 = YGConfigNew();\n  YGConfigSetPointScaleFactor(config2, 1);\n\n  YGConfigRef config3 = YGConfigNew();\n  YGConfigSetPointScaleFactor(config3, 0.5f);\n\n  YGNodeRef root = YGNodeNewWithConfig(config1);\n  YGNodeStyleSetWidth(root, 11.5);\n  YGNodeStyleSetHeight(root, 11.5);\n\n  YGNodeRef node0 = YGNodeNewWithConfig(config2);\n  YGNodeStyleSetWidth(node0, 9.5);\n  YGNodeStyleSetHeight(node0, 9.5);\n  YGNodeInsertChild(root, node0, 0);\n\n  YGNodeRef node1 = YGNodeNewWithConfig(config3);\n  YGNodeStyleSetWidth(node1, 7);\n  YGNodeStyleSetHeight(node1, 7);\n  YGNodeInsertChild(node0, node1, 0);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(YGNodeLayoutGetWidth(root), 11.5);\n  ASSERT_EQ(YGNodeLayoutGetHeight(root), 11.5);\n\n  ASSERT_EQ(YGNodeLayoutGetWidth(node0), 10);\n  ASSERT_EQ(YGNodeLayoutGetHeight(node0), 10);\n\n  ASSERT_EQ(YGNodeLayoutGetWidth(node1), 8);\n  ASSERT_EQ(YGNodeLayoutGetHeight(node1), 8);\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config1);\n  YGConfigFree(config2);\n  YGConfigFree(config3);\n}\n\nTEST(YogaTest, raw_layout_dimensions) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetPointScaleFactor(config, 0.5f);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 11.5f);\n  YGNodeStyleSetHeight(root, 9.5f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_EQ(YGNodeLayoutGetWidth(root), 12.0f);\n  ASSERT_EQ(YGNodeLayoutGetHeight(root), 10.0f);\n  ASSERT_EQ(YGNodeLayoutGetRawWidth(root), 11.5f);\n  ASSERT_EQ(YGNodeLayoutGetRawHeight(root), 9.5f);\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/YGRoundingMeasureFuncTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic YGSize _measureFloor(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode /*widthMode*/,\n    float height,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{\n      width = 10.2f,\n      height = 10.2f,\n  };\n}\n\nstatic YGSize _measureCeil(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode /*widthMode*/,\n    float height,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{\n      width = 10.5f,\n      height = 10.5f,\n  };\n}\n\nstatic YGSize _measureFractial(\n    YGNodeConstRef /*node*/,\n    float width,\n    YGMeasureMode /*widthMode*/,\n    float height,\n    YGMeasureMode /*heightMode*/) {\n  return YGSize{\n      width = 0.5f,\n      height = 0.5f,\n  };\n}\n\nTEST(YogaTest, rounding_feature_with_custom_measure_func_floor) {\n  YGConfigRef config = YGConfigNew();\n  YGNodeRef root = YGNodeNewWithConfig(config);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _measureFloor);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGConfigSetPointScaleFactor(config, 0.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(10.2f, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10.2f, YGNodeLayoutGetHeight(root_child0));\n\n  YGConfigSetPointScaleFactor(config, 1.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetHeight(root_child0));\n\n  YGConfigSetPointScaleFactor(config, 2.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(10.5, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10.5, YGNodeLayoutGetHeight(root_child0));\n\n  YGConfigSetPointScaleFactor(config, 4.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10.25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10.25, YGNodeLayoutGetHeight(root_child0));\n\n  YGConfigSetPointScaleFactor(config, 1.0f / 3.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(12.0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(12.0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_feature_with_custom_measure_func_ceil) {\n  YGConfigRef config = YGConfigNew();\n  YGNodeRef root = YGNodeNewWithConfig(config);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeSetMeasureFunc(root_child0, _measureCeil);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGConfigSetPointScaleFactor(config, 1.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(\n    YogaTest,\n    rounding_feature_with_custom_measure_and_fractial_matching_scale) {\n  YGConfigRef config = YGConfigNew();\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 73.625);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeRelative);\n  YGNodeSetMeasureFunc(root_child0, _measureFractial);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGConfigSetPointScaleFactor(config, 2.0f);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0.5, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0.5, YGNodeLayoutGetHeight(root_child0));\n  ASSERT_FLOAT_EQ(73.5, YGNodeLayoutGetLeft(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/YGScaleChangeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, scale_change_invalidates_layout) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGConfigSetPointScaleFactor(config, 1.0f);\n\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n\n  YGConfigSetPointScaleFactor(config, 1.5f);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  // Left should change due to pixel alignment of new scale factor\n  ASSERT_FLOAT_EQ(25.333334f, YGNodeLayoutGetLeft(root_child1));\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, errata_config_change_relayout) {\n  YGConfig* config = YGConfigNew();\n  YGConfigSetErrata(config, YGErrataStretchFlexBasis);\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGConfigSetErrata(config, YGErrataNone);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  // This should be modified by the lack of the errata\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  // This should be modified by the lack of the errata\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  // This should be modified by the lack of the errata\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, setting_compatible_config_maintains_layout_cache) {\n  static uint32_t measureCallCount = 0;\n  auto measureCustom = [](YGNodeConstRef /*node*/,\n                          float /*width*/,\n                          YGMeasureMode /*widthMode*/,\n                          float /*height*/,\n                          YGMeasureMode /*heightMode*/) {\n    measureCallCount++;\n    return YGSize{\n        .width = 25.0f,\n        .height = 25.0f,\n    };\n  };\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGConfigSetPointScaleFactor(config, 1.0f);\n\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  EXPECT_EQ(0, measureCallCount);\n\n  YGNodeSetMeasureFunc(root_child0, measureCustom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n  EXPECT_EQ(1, measureCallCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n\n  YGConfigRef config2 = YGConfigNew();\n  // Calling YGConfigSetPointScaleFactor multiple times, ensures that config2\n  // gets a different config version that config1\n  YGConfigSetPointScaleFactor(config2, 1.0f);\n  YGConfigSetPointScaleFactor(config2, 1.5f);\n  YGConfigSetPointScaleFactor(config2, 1.0f);\n\n  YGNodeSetConfig(root, config2);\n  YGNodeSetConfig(root_child0, config2);\n  YGNodeSetConfig(root_child1, config2);\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  // Measure should not be called again, as layout should have been cached since\n  // config is functionally the same as before\n  EXPECT_EQ(1, measureCallCount);\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n\n  YGNodeFreeRecursive(root);\n  YGConfigFree(config);\n  YGConfigFree(config2);\n}\n"
  },
  {
    "path": "tests/YGStyleTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, copy_style_same) {\n  YGNodeRef node0 = YGNodeNew();\n  YGNodeRef node1 = YGNodeNew();\n\n  YGNodeCopyStyle(node0, node1);\n\n  YGNodeFree(node0);\n  YGNodeFree(node1);\n}\n\nTEST(YogaTest, copy_style_modified) {\n  YGNodeRef node0 = YGNodeNew();\n  ASSERT_EQ(YGFlexDirectionColumn, YGNodeStyleGetFlexDirection(node0));\n  ASSERT_FALSE(YGNodeStyleGetMaxHeight(node0).unit != YGUnitUndefined);\n\n  YGNodeRef node1 = YGNodeNew();\n  YGNodeStyleSetFlexDirection(node1, YGFlexDirectionRow);\n  YGNodeStyleSetMaxHeight(node1, 10);\n\n  YGNodeCopyStyle(node0, node1);\n  ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(node0));\n  ASSERT_FLOAT_EQ(10, YGNodeStyleGetMaxHeight(node0).value);\n\n  YGNodeFree(node0);\n  YGNodeFree(node1);\n}\n\nTEST(YogaTest, copy_style_modified_same) {\n  YGNodeRef node0 = YGNodeNew();\n  YGNodeStyleSetFlexDirection(node0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxHeight(node0, 10);\n  YGNodeCalculateLayout(node0, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  YGNodeRef node1 = YGNodeNew();\n  YGNodeStyleSetFlexDirection(node1, YGFlexDirectionRow);\n  YGNodeStyleSetMaxHeight(node1, 10);\n\n  YGNodeCopyStyle(node0, node1);\n\n  YGNodeFree(node0);\n  YGNodeFree(node1);\n}\n\nTEST(YogaTest, initialise_flexShrink_flexGrow) {\n  YGNodeRef node0 = YGNodeNew();\n  YGNodeStyleSetFlexShrink(node0, 1);\n  ASSERT_EQ(1, YGNodeStyleGetFlexShrink(node0));\n\n  YGNodeStyleSetFlexShrink(node0, YGUndefined);\n  YGNodeStyleSetFlexGrow(node0, 3);\n  ASSERT_EQ(\n      0,\n      YGNodeStyleGetFlexShrink(\n          node0)); // Default value is Zero, if flex shrink is not defined\n  ASSERT_EQ(3, YGNodeStyleGetFlexGrow(node0));\n\n  YGNodeStyleSetFlexGrow(node0, YGUndefined);\n  YGNodeStyleSetFlexShrink(node0, 3);\n  ASSERT_EQ(\n      0,\n      YGNodeStyleGetFlexGrow(\n          node0)); // Default value is Zero, if flex grow is not defined\n  ASSERT_EQ(3, YGNodeStyleGetFlexShrink(node0));\n  YGNodeFree(node0);\n}\n"
  },
  {
    "path": "tests/YGTreeMutationTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nstatic std::vector<YGNodeRef> getChildren(YGNodeRef const node) {\n  const auto count = YGNodeGetChildCount(node);\n  std::vector<YGNodeRef> children;\n  children.reserve(count);\n  for (size_t i = 0; i < count; i++) {\n    children.push_back(YGNodeGetChild(node, i));\n  }\n  return children;\n}\n\nTEST(YogaTest, set_children_adds_children_to_parent) {\n  YGNodeRef const root = YGNodeNew();\n  YGNodeRef const root_child0 = YGNodeNew();\n  YGNodeRef const root_child1 = YGNodeNew();\n\n  YGNodeRef children[] = {root_child0, root_child1};\n  YGNodeSetChildren(root, children, 2);\n\n  const std::vector<YGNodeRef> expectedChildren = {root_child0, root_child1};\n  ASSERT_EQ(getChildren(root), expectedChildren);\n\n  const std::vector<YGNodeRef> owners = {\n      YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};\n  const std::vector<YGNodeRef> expectedOwners = {root, root};\n  ASSERT_EQ(owners, expectedOwners);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, set_children_to_empty_removes_old_children) {\n  YGNodeRef const root = YGNodeNew();\n  YGNodeRef const root_child0 = YGNodeNew();\n  YGNodeRef const root_child1 = YGNodeNew();\n\n  YGNodeRef children[] = {root_child0, root_child1};\n  YGNodeSetChildren(root, children, 2);\n  YGNodeSetChildren(root, nullptr, 0);\n\n  const std::vector<YGNodeRef> expectedChildren = {};\n  ASSERT_EQ(getChildren(root), expectedChildren);\n\n  const std::vector<YGNodeRef> owners = {\n      YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};\n  const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};\n  ASSERT_EQ(owners, expectedOwners);\n\n  YGNodeFreeRecursive(root);\n}\n\nTEST(YogaTest, set_children_replaces_non_common_children) {\n  YGNodeRef const root = YGNodeNew();\n  YGNodeRef const root_child0 = YGNodeNew();\n  YGNodeRef const root_child1 = YGNodeNew();\n\n  YGNodeRef children1[] = {root_child0, root_child1};\n  YGNodeSetChildren(root, children1, 2);\n\n  YGNodeRef const root_child2 = YGNodeNew();\n  YGNodeRef const root_child3 = YGNodeNew();\n\n  YGNodeRef children2[] = {root_child2, root_child3};\n  YGNodeSetChildren(root, children2, 2);\n\n  const std::vector<YGNodeRef> expectedChildren = {root_child2, root_child3};\n  ASSERT_EQ(getChildren(root), expectedChildren);\n\n  const std::vector<YGNodeRef> owners = {\n      YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};\n  const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};\n  ASSERT_EQ(owners, expectedOwners);\n\n  YGNodeFreeRecursive(root);\n  YGNodeFree(root_child0);\n  YGNodeFree(root_child1);\n}\n\nTEST(YogaTest, set_children_keeps_and_reorders_common_children) {\n  YGNodeRef const root = YGNodeNew();\n  YGNodeRef const root_child0 = YGNodeNew();\n  YGNodeRef const root_child1 = YGNodeNew();\n  YGNodeRef const root_child2 = YGNodeNew();\n\n  YGNodeRef children1[] = {root_child0, root_child1, root_child2};\n  YGNodeSetChildren(root, children1, 3);\n\n  YGNodeRef const root_child3 = YGNodeNew();\n\n  YGNodeRef children2[] = {root_child2, root_child1, root_child3};\n  YGNodeSetChildren(root, children2, 3);\n\n  const std::vector<YGNodeRef> expectedChildren = {\n      root_child2, root_child1, root_child3};\n  ASSERT_EQ(getChildren(root), expectedChildren);\n\n  const std::vector<YGNodeRef> owners = {\n      YGNodeGetOwner(root_child0),\n      YGNodeGetOwner(root_child1),\n      YGNodeGetOwner(root_child2),\n      YGNodeGetOwner(root_child3)};\n  const std::vector<YGNodeRef> expectedOwners = {nullptr, root, root, root};\n  ASSERT_EQ(owners, expectedOwners);\n\n  YGNodeFreeRecursive(root);\n  YGNodeFree(root_child0);\n}\n"
  },
  {
    "path": "tests/YGValueTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n\n#include <yoga/YGValue.h>\n\nTEST(YGValue, supports_equality) {\n  ASSERT_EQ((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitPercent}));\n  ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{56.7f, YGUnitPercent}));\n  ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitPoint}));\n  ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitAuto}));\n  ASSERT_NE((YGValue{12.5f, YGUnitPercent}), (YGValue{12.5f, YGUnitUndefined}));\n\n  ASSERT_EQ(\n      (YGValue{12.5f, YGUnitUndefined}),\n      (YGValue{YGUndefined, YGUnitUndefined}));\n  ASSERT_EQ((YGValue{0, YGUnitAuto}), (YGValue{-1, YGUnitAuto}));\n}\n"
  },
  {
    "path": "tests/YGZeroOutLayoutRecursivelyTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n\nTEST(YogaTest, zero_out_layout) {\n  YGNodeRef root = YGNodeNew();\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef child = YGNodeNew();\n  YGNodeInsertChild(root, child, 0);\n  YGNodeStyleSetWidth(child, 100);\n  YGNodeStyleSetHeight(child, 100);\n  YGNodeStyleSetMargin(child, YGEdgeTop, 10);\n  YGNodeStyleSetPadding(child, YGEdgeTop, 10);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetMargin(child, YGEdgeTop));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetPadding(child, YGEdgeTop));\n\n  YGNodeStyleSetDisplay(child, YGDisplayNone);\n\n  YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(child, YGEdgeTop));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(child, YGEdgeTop));\n\n  YGNodeFreeRecursive(root);\n}\n"
  },
  {
    "path": "tests/generated/YGAbsolutePositionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<df2124655f509fa6cc0d66ad0fcb6d27>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAbsolutePositionTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, absolute_layout_width_height_start_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_width_height_left_auto_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_width_height_left_right_auto) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetPositionAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_width_height_left_auto_right_auto) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetPositionAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_width_height_end_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_start_top_end_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_width_height_start_top_end_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetOverflow(root, YGOverflowHidden);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0, YGEdgeStart, 0);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_within_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeStyleSetMargin(root, YGEdgeAll, 10);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 0);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetPosition(root_child1, YGEdgeRight, 0);\n  YGNodeStyleSetPosition(root_child1, YGEdgeBottom, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetPosition(root_child2, YGEdgeLeft, 0);\n  YGNodeStyleSetPosition(root_child2, YGEdgeTop, 0);\n  YGNodeStyleSetMargin(root_child2, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child3, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 50);\n  YGNodeStyleSetPosition(root_child3, YGEdgeRight, 0);\n  YGNodeStyleSetPosition(root_child3, YGEdgeBottom, 0);\n  YGNodeStyleSetMargin(root_child3, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_justify_content_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_center_on_child_only) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_top_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_bottom_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_left_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_right_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 110);\n  YGNodeStyleSetFlexGrow(root, 1);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 5);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, position_root_with_rtl_should_position_withoutdirection) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetPosition(root, YGEdgeLeft, 72);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_percentage_bottom_based_on_parent_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 50);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child1, YGEdgeBottom, 50);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child2, YGEdgeTop, 10);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeStyleSetPositionPercent(root_child2, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_in_wrap_reverse_column_container) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_in_wrap_reverse_row_container) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_in_wrap_reverse_column_container_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_in_wrap_reverse_row_container_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_absolute_position_infinite_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 300);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1, 20);\n  YGNodeStyleSetHeightPercent(root_child1, 20);\n  YGNodeStyleSetPositionPercent(root_child1, YGEdgeLeft, 20);\n  YGNodeStyleSetPositionPercent(root_child1, YGEdgeTop, 20);\n  YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_percentage_height_based_on_padded_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root, YGEdgeTop, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeightPercent(root_child0, 50);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_percentage_height_based_on_padded_parent_and_align_items_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeightPercent(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_padding_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_padding_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_padding_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_padding_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeAll, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, absolute_layout_column_reverse_margin_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 3);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(143, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAlignContentTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<786bcbb40ccb0969c2cd0efbba698d7b>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignContentTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, align_content_flex_start_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_without_height_on_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_with_flex) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetFlexGrow(root_child3, 1);\n  YGNodeStyleSetFlexShrink(root_child3, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child3, 0);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_end_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_end_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_end_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_end_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignFlexEnd);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_end_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignFlexEnd);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-70, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-40, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-70, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-40, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_center_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_center_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_center_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_center_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-25, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-25, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_center_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-35, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-35, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceBetween);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_wrapped_negative_space_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceBetween);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_between_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceBetween);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(95, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(95, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceAround);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_wrapped_negative_space_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceAround);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceAround);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_nowrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeStyleSetHeight(root_child4, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_wrap_singleline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 140);\n  YGNodeStyleSetHeight(root, 120);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_wrapped_negative_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceEvenly);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_wrapped_negative_space_gap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 60);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignSpaceEvenly);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetGap(root_child0, YGGutterAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 80);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child2, 80);\n  YGNodeStyleSetHeight(root_child0_child2, 20);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_flex) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetFlexGrow(root_child3, 1);\n  YGNodeStyleSetFlexShrink(root_child3, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child3, 0);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_flex_no_shrink) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetFlexGrow(root_child3, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child3, 0);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetMargin(root_child1, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetMargin(root_child3, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetPadding(root_child1, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetPadding(root_child3, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_single_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_fixed_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 60);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetMaxHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_row_with_min_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetMinHeight(root_child1, 80);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 150);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_is_not_overriding_align_items) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignStretch);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetAlignContent(root_child0_child0, YGAlignStretch);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_with_min_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMinHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_with_max_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_with_max_cross_axis_and_border_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 5);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 2);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(414, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(207, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(414, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(207, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_with_min_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMinHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(267, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(267, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_with_max_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_with_max_cross_axis_violated) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_with_max_cross_axis_violated_padding_and_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceEvenly);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 5);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 2);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(207, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(7, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(207, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_and_align_items_flex_end_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_and_align_items_center_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(63, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(63, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_around_and_align_items_flex_start_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_flex_start_stretch_doesnt_influence_line_box_dim) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 20);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 20);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 30);\n  YGNodeStyleSetWidth(root_child1_child0, 30);\n  YGNodeStyleSetMargin(root_child1_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child1, 30);\n  YGNodeStyleSetWidth(root_child1_child1, 30);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child2, 30);\n  YGNodeStyleSetWidth(root_child1_child2, 30);\n  YGNodeStyleSetMargin(root_child1_child2, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child3, 30);\n  YGNodeStyleSetWidth(root_child1_child3, 30);\n  YGNodeStyleSetMargin(root_child1_child3, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n\n  YGNodeRef root_child1_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child4, 30);\n  YGNodeStyleSetWidth(root_child1_child4, 30);\n  YGNodeStyleSetMargin(root_child1_child4, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child4, 4);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetMargin(root_child2, YGEdgeLeft, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(330, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(260, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_stretch_does_influence_line_box_dim) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 20);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 20);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetAlignContent(root_child1, YGAlignStretch);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 30);\n  YGNodeStyleSetWidth(root_child1_child0, 30);\n  YGNodeStyleSetMargin(root_child1_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child1, 30);\n  YGNodeStyleSetWidth(root_child1_child1, 30);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child2, 30);\n  YGNodeStyleSetWidth(root_child1_child2, 30);\n  YGNodeStyleSetMargin(root_child1_child2, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child3, 30);\n  YGNodeStyleSetWidth(root_child1_child3, 30);\n  YGNodeStyleSetMargin(root_child1_child3, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n\n  YGNodeRef root_child1_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child4, 30);\n  YGNodeStyleSetWidth(root_child1_child4, 30);\n  YGNodeStyleSetMargin(root_child1_child4, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child4, 4);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetMargin(root_child2, YGEdgeLeft, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(330, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(260, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_space_evenly_stretch_does_influence_line_box_dim) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 20);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 20);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 20);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetAlignContent(root_child1, YGAlignStretch);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 30);\n  YGNodeStyleSetWidth(root_child1_child0, 30);\n  YGNodeStyleSetMargin(root_child1_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child1, 30);\n  YGNodeStyleSetWidth(root_child1_child1, 30);\n  YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child2, 30);\n  YGNodeStyleSetWidth(root_child1_child2, 30);\n  YGNodeStyleSetMargin(root_child1_child2, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child3, 30);\n  YGNodeStyleSetWidth(root_child1_child3, 30);\n  YGNodeStyleSetMargin(root_child1_child3, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n\n  YGNodeRef root_child1_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child4, 30);\n  YGNodeStyleSetWidth(root_child1_child4, 30);\n  YGNodeStyleSetMargin(root_child1_child4, YGEdgeRight, 20);\n  YGNodeInsertChild(root_child1, root_child1_child4, 4);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetMargin(root_child2, YGEdgeLeft, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(330, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(260, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child3));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1_child4));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_and_align_items_flex_end_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_and_align_items_flex_start_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_and_align_items_center_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_content_stretch_and_align_items_stretch_with_flex_wrap) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidth(root_child0, 150);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetWidth(root_child1, 120);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeStyleSetWidth(root_child2, 120);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAlignItemsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<40cc61a8728b4532578e77a95e67d785>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignItemsTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, align_items_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_multiline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 25);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child1, 25);\n  YGNodeStyleSetHeight(root_child1_child1, 10);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child2, 25);\n  YGNodeStyleSetHeight(root_child1_child2, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child3, 25);\n  YGNodeStyleSetHeight(root_child1_child3, 10);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_multiline_override) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 25);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child1, 25);\n  YGNodeStyleSetHeight(root_child1_child1, 10);\n  YGNodeStyleSetAlignSelf(root_child1_child1, YGAlignBaseline);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child2, 25);\n  YGNodeStyleSetHeight(root_child1_child2, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child3, 25);\n  YGNodeStyleSetHeight(root_child1_child3, 10);\n  YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_multiline_no_override_on_secondline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 25);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child1, 25);\n  YGNodeStyleSetHeight(root_child1_child1, 10);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child2, 25);\n  YGNodeStyleSetHeight(root_child1_child2, 20);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child3, 25);\n  YGNodeStyleSetHeight(root_child1_child3, 10);\n  YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);\n  YGNodeInsertChild(root_child1, root_child1_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_top2) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetPosition(root_child1, YGEdgeTop, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_double_nested_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 15);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 5);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeStyleSetMargin(root_child1_child0, YGEdgeAll, 1);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-1, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_child_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetPadding(root_child1, YGEdgeAll, 5);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_multiline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2_child0, 50);\n  YGNodeStyleSetHeight(root_child2_child0, 10);\n  YGNodeInsertChild(root_child2, root_child2_child0, 0);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 50);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_multiline_column) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 20);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeStyleSetHeight(root_child2, 70);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2_child0, 10);\n  YGNodeStyleSetHeight(root_child2_child0, 10);\n  YGNodeInsertChild(root_child2, root_child2_child0, 0);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_multiline_column2) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 20);\n  YGNodeStyleSetHeight(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeStyleSetHeight(root_child2, 70);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2_child0, 10);\n  YGNodeStyleSetHeight(root_child2_child0, 10);\n  YGNodeInsertChild(root_child2, root_child2_child0, 0);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_baseline_multiline_row_and_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignBaseline);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2_child0, 50);\n  YGNodeStyleSetHeight(root_child2_child0, 10);\n  YGNodeInsertChild(root_child2, root_child2_child0, 0);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 50);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_center_child_with_margin_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 52);\n  YGNodeStyleSetHeight(root_child0_child0, 52);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_flex_end_child_with_margin_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 52);\n  YGNodeStyleSetHeight(root_child0_child0, 52);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_center_child_without_margin_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 72);\n  YGNodeStyleSetHeight(root_child0_child0, 72);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_flex_end_child_without_margin_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 72);\n  YGNodeStyleSetHeight(root_child0_child0, 72);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_center_should_size_based_on_content) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 20);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 20);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_stretch_should_size_based_on_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 20);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 20);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_flex_start_with_shrinking_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_flex_start_with_stretching_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_flex_start_with_shrinking_children_with_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_flex_end_with_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 75);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 3);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(3, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(58, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-8, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_stretch_with_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 75);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 3);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(3, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(58, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-8, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_non_stretch_s526008) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 400);\n  YGNodeStyleSetHeight(root, 400);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignItems(root_child0_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 10);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAlignSelfTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<11f5304e4f2c4a549b491291c3ddf72d>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAlignSelfTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, align_self_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignCenter);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_self_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_self_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_self_flex_end_override_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_self_baseline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetAlignSelf(root_child0, YGAlignBaseline);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetAlignSelf(root_child1, YGAlignBaseline);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 50);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAndroidNewsFeed.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<a64f3b58c731e947275c4c646a5d23e5>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAndroidNewsFeed.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, android_news_feed) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n  YGNodeStyleSetWidth(root, 1080);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0, YGAlignStretch);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0, YGAlignStretch);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root_child0_child0_child0_child0, YGAlignFlexStart);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0, YGAlignStretch);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 24);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeStart, 36);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child0, YGAlignStretch);\n  YGNodeInsertChild(root_child0_child0_child0_child0, root_child0_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child0_child0, YGAlignStretch);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0_child0_child0, 120);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0_child0_child0, 120);\n  YGNodeInsertChild(root_child0_child0_child0_child0_child0, root_child0_child0_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1, 1);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0_child1, YGEdgeRight, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeLeft, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeTop, 21);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeRight, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeBottom, 18);\n  YGNodeInsertChild(root_child0_child0_child0_child0, root_child0_child0_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0_child1_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1_child0, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1_child0, 1);\n  YGNodeInsertChild(root_child0_child0_child0_child0_child1, root_child0_child0_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1_child1, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1_child1, 1);\n  YGNodeInsertChild(root_child0_child0_child0_child0_child1, root_child0_child0_child0_child0_child1_child1, 1);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1, YGAlignStretch);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root_child0_child0_child1_child0, YGAlignFlexStart);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0, YGAlignStretch);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 24);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeStart, 174);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child1_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child0, YGAlignStretch);\n  YGNodeInsertChild(root_child0_child0_child1_child0, root_child0_child0_child1_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child0_child0, YGAlignStretch);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0_child0_child0, 72);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0_child0_child0, 72);\n  YGNodeInsertChild(root_child0_child0_child1_child0_child0, root_child0_child0_child1_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1, 1);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0_child1, YGEdgeRight, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeLeft, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeTop, 21);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeRight, 36);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeBottom, 18);\n  YGNodeInsertChild(root_child0_child0_child1_child0, root_child0_child0_child1_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0_child1_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1_child0, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1_child0, 1);\n  YGNodeInsertChild(root_child0_child0_child1_child0_child1, root_child0_child0_child1_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child1_child0_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1_child1, YGAlignStretch);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1_child1, 1);\n  YGNodeInsertChild(root_child0_child0_child1_child0_child1, root_child0_child0_child1_child0_child1_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(144, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(1044, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(144, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(96, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(174, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(906, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(144, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(1044, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(924, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(816, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(144, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(96, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(906, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(834, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(726, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAspectRatioTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<5bcb67ab8942663d22e1cd5f7b5be0fe>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAspectRatioTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, aspect_ratio_does_not_stretch_cross_axis_dim) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetOverflow(root_child0, YGOverflowScroll);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 2);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child0, 0);\n  YGNodeStyleSetAspectRatio(root_child0_child0_child0, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2, 0);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child2_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child2_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2_child0, 0);\n  YGNodeStyleSetAspectRatio(root_child0_child0_child2_child0, 1);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n\n  YGNodeRef root_child0_child0_child2_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0_child0, 5);\n  YGNodeInsertChild(root_child0_child0_child2_child0, root_child0_child0_child2_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child2_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child2_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child2_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child2_child0_child1, 0);\n  YGNodeStyleSetAspectRatio(root_child0_child0_child2_child0_child1, 1);\n  YGNodeInsertChild(root_child0_child0_child2_child0, root_child0_child0_child2_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(103, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  ASSERT_FLOAT_EQ(93, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(98, YGNodeLayoutGetWidth(root_child0_child0_child2_child0_child1));\n  ASSERT_FLOAT_EQ(197, YGNodeLayoutGetHeight(root_child0_child0_child2_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, zero_aspect_ratio_behaves_like_auto) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetAspectRatio(root_child0, 0);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGAutoTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<5b67093f679c81d5effe513ecda452c3>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGAutoTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, auto_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthAuto(root);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, auto_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeightAuto(root);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, auto_flex_basis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetFlexBasisAuto(root);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, auto_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPositionAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, auto_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGBorderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<fe03e7465593f0eceb53af02f65aa6fe>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBorderTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, border_no_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, border_container_match_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, border_flex_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, border_stretch_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, border_center_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeStart, 10);\n  YGNodeStyleSetBorder(root, YGEdgeEnd, 20);\n  YGNodeStyleSetBorder(root, YGEdgeBottom, 20);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGBoxSizingTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<f6a4169b6a90a39c6d1dca5abe23ff17>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGBoxSizingTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, box_sizing_content_box_simple) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_simple) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeightPercent(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 16);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeightPercent(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 16);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_absolute) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 12);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 8);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_absolute) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 12);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 8);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_comtaining_block) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 12);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 8);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeightPercent(root_child0_child0, 25);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(31, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(31, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_comtaining_block) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 12);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 8);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeightPercent(root_child0_child0, 25);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_padding_only) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_padding_only_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 150);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 75);\n  YGNodeStyleSetPaddingPercent(root_child0, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(95, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(95, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_padding_only) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_padding_only_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 150);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 75);\n  YGNodeStyleSetPaddingPercent(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_border_only) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_border_only_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_border_only) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_border_only_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_no_padding_no_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_no_padding_no_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 25);\n  YGNodeStyleSetHeight(root_child3, 25);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_children) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 25);\n  YGNodeStyleSetHeight(root_child3, 25);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_siblings) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeStyleSetBoxSizing(root_child1, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child1, YGEdgeAll, 10);\n  YGNodeStyleSetBorder(root_child1, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 25);\n  YGNodeStyleSetHeight(root_child3, 25);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(115, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(115, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_siblings) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 25);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeStyleSetPadding(root_child1, YGEdgeAll, 10);\n  YGNodeStyleSetBorder(root_child1, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 25);\n  YGNodeStyleSetHeight(root_child3, 25);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetMaxHeight(root_child0, 50);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetMaxHeight(root_child0, 50);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_min_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_min_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_min_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetMinHeight(root_child0, 50);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_min_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetMinHeight(root_child0, 50);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 15);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 25);\n  YGNodeStyleSetHeight(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_no_height_no_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 2);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 7);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_no_height_no_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 2);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 7);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_nested) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 15);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 3);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 2);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 7);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 5);\n  YGNodeStyleSetBoxSizing(root_child0_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeAll, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeAll, 2);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(136, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(136, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(136, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(136, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(13, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_nested) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 15);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 3);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 2);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 7);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 5);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeAll, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeAll, 2);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_nested_alternating) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 3);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 2);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 20);\n  YGNodeStyleSetHeight(root_child0_child0, 25);\n  YGNodeStyleSetBoxSizing(root_child0_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeAll, 3);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeAll, 6);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 5);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeAll, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeAll, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(43, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-8, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(38, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(43, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(19, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_nested_alternating) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 3);\n  YGNodeStyleSetBorder(root, YGEdgeAll, 2);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeStyleSetHeight(root_child0, 40);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 20);\n  YGNodeStyleSetHeight(root_child0_child0, 25);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeAll, 3);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeAll, 6);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 5);\n  YGNodeStyleSetBoxSizing(root_child0_child0_child0, YGBoxSizingContentBox);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeAll, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeAll, 1);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(14, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-3, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(14, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_flex_basis_row) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_flex_basis_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_flex_basis_column) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 10);\n  YGNodeStyleSetBoxSizing(root_child0, YGBoxSizingContentBox);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_flex_basis_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 25);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_padding_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeStart, 5);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_padding_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeStart, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_padding_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeEnd, 5);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_padding_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeEnd, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_border_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeStart, 5);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_border_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeStart, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_content_box_border_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeEnd, 5);\n  YGNodeStyleSetBoxSizing(root, YGBoxSizingContentBox);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(105, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, box_sizing_border_box_border_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetBorder(root, YGEdgeEnd, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGDimensionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<abfdbb18639ce01b66e9e7dd742c45b5>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDimensionTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, wrap_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_grandchild) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGDisplayContentsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<a314a86c9d90aabdfd6ac470fe385f06>>\n * generated by gentest/gentest-driver.ts from gentest/fixtures/YGDisplayContentsTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, test1) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGDisplayTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<d6c54131d13e05ab632791e821dd2df3>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGDisplayTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, display_none) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayNone);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_none_fixed_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayNone);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_none_with_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayNone);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_none_with_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayNone);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child1_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1_child0, 0);\n  YGNodeStyleSetWidth(root_child1_child0, 20);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_none_with_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayNone);\n  YGNodeStyleSetPosition(root_child1, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_none_with_position_absolute) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayNone);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_fixed_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_with_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_with_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_with_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_with_position_absolute) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child1, 20);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_nested) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0, YGDisplayContents);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child0_child0, YGDisplayContents);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child0, 0);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 10);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0_child0_child1, 0);\n  YGNodeStyleSetHeight(root_child0_child0_child1, 20);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, display_contents_with_siblings) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetHeight(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetDisplay(root_child1, YGDisplayContents);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child1_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1_child0, 0);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1_child1, 0);\n  YGNodeStyleSetHeight(root_child1_child1, 20);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGFlexBasisFitContentTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<a42a4541e0d8b8808aedb4abd62c617b>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexBasisFitContentTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, container_child_overflows_definite_parent_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 500);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, container_child_overflows_definite_parent_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 500);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, container_child_within_bounds_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, multiple_container_children_overflow_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 400);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 500);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, scroll_container_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetOverflow(root, YGOverflowScroll);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 500);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, explicit_and_container_children_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 500);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_basis_in_scroll_content_container) {\n  YGConfigRef config = YGConfigNew();\n  YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureFixFlexBasisFitContent, true);\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetOverflow(root, YGOverflowScroll);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 200);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0_child1, 300);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGFlexDirectionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<72067070240f28a88e61f4a8e539a1d6>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexDirectionTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, flex_direction_column_no_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_no_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_margin_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetMargin(root, YGEdgeLeft, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_margin_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetMargin(root, YGEdgeStart, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_margin_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetMargin(root, YGEdgeRight, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_margin_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetMargin(root, YGEdgeEnd, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_margin_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_margin_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetMargin(root, YGEdgeBottom, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_padding_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_padding_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPadding(root, YGEdgeStart, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_padding_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_padding_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPadding(root, YGEdgeEnd, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_padding_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_padding_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_border_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetBorder(root, YGEdgeLeft, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_border_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetBorder(root, YGEdgeStart, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_border_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetBorder(root, YGEdgeRight, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_border_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetBorder(root, YGEdgeEnd, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_border_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetBorder(root, YGEdgeTop, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_border_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetBorder(root, YGEdgeBottom, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_pos_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_pos_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeStart, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_pos_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_pos_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeEnd, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_pos_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_column_reverse_pos_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_pos_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_pos_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_pos_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_pos_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_pos_start) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeStart, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_pos_end) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeEnd, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_margin_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_margin_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_margin_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_margin_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_marign_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeStart, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_margin_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeEnd, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_border_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_border_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_border_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_border_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_border_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeStart, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_border_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeEnd, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_padding_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_padding_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_padding_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_col_reverse_inner_padding_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_padding_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeStart, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_row_reverse_inner_padding_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeEnd, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 10);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_direction_alternating_with_percent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGFlexTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<fc0223fbc4c0e4d8950402660fd04687>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, flex_basis_flex_grow_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_shrink_flex_grow_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_shrink_flex_grow_child_flex_shrink_other_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 500);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_basis_flex_grow_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_basis_flex_shrink_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_basis_flex_shrink_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_shrink_to_zero) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 75);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_basis_overrides_main_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_shrink_at_most) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_less_than_factor_one) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 0.2f);\n  YGNodeStyleSetFlexBasis(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 0.2f);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 0.4f);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGFlexWrapTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<6df462978f414977308bd5684b3db30a>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGFlexWrapTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, wrap_column) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 30);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 30);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 30);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 30);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 30);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 30);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_row_align_items_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 30);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_row_align_items_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 30);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_wrap_children_with_min_main_overriding_flex_basis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMinWidth(root_child0, 55);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetMinWidth(root_child1, 55);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_wrap_wrap_to_child_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 100);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_wrap_align_stretch_fits_one_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 150);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_row_align_content_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_row_align_content_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_row_single_line_different_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(270, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(240, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(210, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_row_align_content_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_row_align_content_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_reverse_column_fixed_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeStyleSetWidth(root_child1, 30);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child3, 40);\n  YGNodeStyleSetWidth(root_child3, 30);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child4, 50);\n  YGNodeStyleSetWidth(root_child4, 30);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrapped_row_within_align_items_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 150);\n  YGNodeStyleSetHeight(root_child0_child0, 80);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 80);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrapped_row_within_align_items_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 150);\n  YGNodeStyleSetHeight(root_child0_child0, 80);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 80);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrapped_row_within_align_items_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 150);\n  YGNodeStyleSetHeight(root_child0_child0, 80);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 80);\n  YGNodeStyleSetHeight(root_child0_child1, 80);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrapped_column_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 700);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMaxHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 200);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeStyleSetMargin(root_child1, YGEdgeAll, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(420, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrapped_column_max_height_flex) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetWidth(root, 700);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMaxHeight(root_child0, 200);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 200);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeStyleSetMargin(root_child1, YGEdgeAll, 20);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_nodes_with_content_sizing_overflowing_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetWidth(root_child0, 85);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 40);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 40);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0_child1, YGEdgeRight, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1_child0, 40);\n  YGNodeStyleSetWidth(root_child0_child1_child0, 40);\n  YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(415, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_nodes_with_content_sizing_margin_cross) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetWidth(root_child0, 70);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 40);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 40);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0_child1, YGEdgeTop, 10);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1_child0, 40);\n  YGNodeStyleSetWidth(root_child0_child1_child0, 40);\n  YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(430, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_with_min_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMinHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_with_max_cross_axis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 400);\n  YGNodeStyleSetHeight(root_child1, 200);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, nowrap_expands_flexline_box_to_min_cross) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, wrap_does_not_impose_min_cross_onto_single_flexline) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGGapTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<c5903f12de26be99abe453db8f2f2814>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGGapTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, column_gap_flexible) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_inflexible) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_mixed_flexible) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_child_margins) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetMargin(root_child0, YGEdgeHorizontal, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeStyleSetMargin(root_child1, YGEdgeHorizontal, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeStyleSetMargin(root_child2, YGEdgeHorizontal, 15);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(26, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(63, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(76, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_row_gap_wrapping) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n\n  YGNodeRef root_child6 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child6, 20);\n  YGNodeStyleSetHeight(root_child6, 20);\n  YGNodeInsertChild(root, root_child6, 6);\n\n  YGNodeRef root_child7 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child7, 20);\n  YGNodeStyleSetHeight(root_child7, 20);\n  YGNodeInsertChild(root, root_child7, 7);\n\n  YGNodeRef root_child8 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child8, 20);\n  YGNodeStyleSetHeight(root_child8, 20);\n  YGNodeInsertChild(root, root_child8, 8);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child6));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child6));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child6));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child6));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child7));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child7));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child7));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child7));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child8));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child8));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child8));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child8));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child6));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child6));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child6));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child6));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child7));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child7));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child7));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child7));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child8));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child8));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child8));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child8));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_start_index) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 80);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_space_between) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(3, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(3, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_justify_space_evenly) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignCenter);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignFlexEnd);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_space_between) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceBetween);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeStyleSetHeight(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeStyleSetHeight(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeStyleSetHeight(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_wrap_align_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetGap(root, YGGutterColumn, 5);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child0, 60);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child1, 60);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child2, 60);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child3, 60);\n  YGNodeStyleSetFlexGrow(root_child3, 1);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child4, 60);\n  YGNodeStyleSetFlexGrow(root_child4, 1);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(76, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(153, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(229, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(229, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(153, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(76, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_gap_determines_parent_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_align_items_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_align_items_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetGap(root, YGGutterColumn, 10);\n  YGNodeStyleSetGap(root, YGGutterRow, 20);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 20);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 20);\n  YGNodeInsertChild(root, root_child4, 4);\n\n  YGNodeRef root_child5 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child5, 20);\n  YGNodeInsertChild(root, root_child5, 5);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child4));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child5));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child5));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child5));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_column_child_margins) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetGap(root, YGGutterRow, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetMargin(root_child0, YGEdgeVertical, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeStyleSetMargin(root_child1, YGEdgeVertical, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeStyleSetMargin(root_child2, YGEdgeVertical, 15);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(66, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(143, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(66, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(143, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(42, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_row_wrap_child_margins) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetGap(root, YGGutterRow, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetMargin(root_child0, YGEdgeVertical, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 60);\n  YGNodeStyleSetMargin(root_child1, YGEdgeVertical, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 60);\n  YGNodeStyleSetMargin(root_child2, YGEdgeVertical, 15);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(2, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_determines_parent_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetGap(root, YGGutterRow, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 30);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 700);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_determines_parent_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_both_content_padding_and_item_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 700);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeStyleSetPadding(root_child1, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeStyleSetPadding(root_child2, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeStyleSetPadding(root_child3, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeStyleSetPadding(root_child4, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_both_content_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 700);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_content_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 700);\n  YGNodeStyleSetMargin(root, YGEdgeAll, 10);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(340, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(340, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_content_margin_and_padding) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 700);\n  YGNodeStyleSetMargin(root, YGEdgeAll, 10);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(138, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(178, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(346, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_flexible_content) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeStyleSetFlexShrink(root_child2, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child2, 0);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_mixed_flexible_content) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetHeight(root, 300);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexShrink(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 0);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(270, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(290, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, row_gap_percent_wrapping_with_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidth(root, 300);\n  YGNodeStyleSetGapPercent(root, YGGutterAll, 10);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeStyleSetHeight(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child3, 100);\n  YGNodeStyleSetHeight(root_child3, 100);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child4, 100);\n  YGNodeStyleSetHeight(root_child4, 100);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGIntrinsicSizeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<c5072253931df063ee52c754c1fed610>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGIntrinsicSizeTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, contains_inner_text_long_word) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(700, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1300, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_no_width_no_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_no_width_no_height_long_word_in_paragraph) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_fixed_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1290, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1900, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1290, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_no_width_fixed_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_fixed_width_fixed_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1950, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_max_width_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidth(root_child0, 50);\n  YGNodeStyleSetMaxHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1950, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_max_width_max_height_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1890, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1890, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1890, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1950, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1890, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1290, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1900, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(1290, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_fixed_width_shorter_text) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1900, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_fixed_height_shorter_text) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(1890, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, contains_inner_text_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 2000);\n  YGNodeStyleSetHeight(root, 2000);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeSetContext(root_child0, (void*)\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at volutpat libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor, vitae finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo tincidunt finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam vulputate eleifasd lectus vel varius. Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel venenatis turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed nunc malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor lobortis. Sed at consectetur ipsum.\");\n  YGNodeSetMeasureFunc(root_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(2000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidthMaxContent(root);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidthFitContent(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetWidthStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(450, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(325, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeightMaxContent(root);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightFitContent(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_flex_basis_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexBasisMaxContent(root);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_flex_basis_column) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasisFitContent(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_flex_basis_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasisStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_flex_basis_row) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetFlexBasisMaxContent(root);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 500);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(600, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(550, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(600, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(550, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_flex_basis_row) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexBasisFitContent(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_flex_basis_row) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetFlexBasisStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(450, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(325, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidthMaxContent(root);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidthFitContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 110);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidthStretch(root_child0);\n  YGNodeStyleSetWidth(root_child0, 600);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(450, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(325, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidthMaxContent(root);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 100);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 25);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidthFitContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 90);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidthStretch(root_child0);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(450, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(325, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_max_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxHeightMaxContent(root);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(175, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_max_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxHeightFitContent(root_child0);\n  YGNodeStyleSetHeight(root_child0, 110);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_max_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxHeightStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetHeight(root_child0, 600);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_content_min_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeightMaxContent(root);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexWrap(root, YGWrapWrap);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, fit_content_min_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 90);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinHeightFitContent(root_child0);\n  YGNodeStyleSetHeight(root_child0, 90);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, stretch_min_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinHeightStretch(root_child0);\n  YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child2, 50);\n  YGNodeStyleSetHeight(root_child0_child2, 25);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_max_content_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthMaxContent(root_child0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-940, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_stretch_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthStretch(root_child0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_fit_content_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthFitContent(root_child0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-670, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_max_content_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidthMaxContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-940, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_stretch_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidthStretch(root_child0);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_fit_content_min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidthFitContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 300);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-670, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_max_content_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidthMaxContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 2000);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-940, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(1140, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_stretch_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidthStretch(root_child0);\n  YGNodeStyleSetWidth(root_child0, 300);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, text_fit_content_max_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidthFitContent(root_child0);\n  YGNodeStyleSetWidth(root_child0, 1000);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeSetContext(root_child0_child0, (void*)\"Lorem ipsum sdafhasdfkjlasdhlkajsfhasldkfhasdlkahsdflkjasdhflaksdfasdlkjhasdlfjahsdfljkasdhalsdfhas dolor sit amet\");\n  YGNodeSetMeasureFunc(root_child0_child0, &facebook::yoga::test::IntrinsicSizeMeasure);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-670, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(870, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGJustifyContentTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<04bd6ff3556f7ed9137e715a47483341>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGJustifyContentTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, justify_content_row_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(82, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(82, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_space_between) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(82, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(82, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_space_between) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_min_width_and_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 50);\n  YGNodeStyleSetMargin(root, YGEdgeLeft, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_max_width_and_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetMaxWidth(root, 80);\n  YGNodeStyleSetMargin(root, YGEdgeLeft, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_min_height_and_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 50);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_max_height_and_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 80);\n  YGNodeStyleSetMargin(root, YGEdgeTop, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_column_space_evenly) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(74, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(74, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_row_space_evenly) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(26, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(26, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_min_width_with_padding_child_width_greater_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 1000);\n  YGNodeStyleSetHeight(root, 1584);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignStretch);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyCenter);\n  YGNodeStyleSetAlignContent(root_child0_child0, YGAlignStretch);\n  YGNodeStyleSetMinWidth(root_child0_child0, 400);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 300);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0, YGAlignStretch);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1584, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1000, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1584, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1000, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_min_width_with_padding_child_width_lower_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 1080);\n  YGNodeStyleSetHeight(root, 1584);\n  YGNodeStyleSetAlignContent(root, YGAlignStretch);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetAlignContent(root_child0, YGAlignStretch);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyCenter);\n  YGNodeStyleSetAlignContent(root_child0_child0, YGAlignStretch);\n  YGNodeStyleSetMinWidth(root_child0_child0, 400);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 199);\n  YGNodeStyleSetAlignContent(root_child0_child0_child0, YGAlignStretch);\n  YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1584, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(101, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(199, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(1584, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(1080, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(680, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(101, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(199, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_space_between_indefinite_container_dim_with_free_space) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 300);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidth(root_child0, 200);\n  YGNodeStyleSetJustifyContent(root_child0, YGJustifySpaceBetween);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_flex_start_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_flex_end_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_flex_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_flex_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-9, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(31, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(71, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(31, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-9, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_space_between) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_space_around) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_space_evenly) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_reverse_space_around) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_reverse_space_evenly) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRowReverse);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_row_space_evenly_auto_margin) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 102);\n  YGNodeStyleSetHeight(root, 102);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 40);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 40);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 40);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(62, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-18, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGMarginTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<00156c80767d1d30c9fee15bc8f4c502>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMarginTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, margin_start) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeStart, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeEnd, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_and_flex_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_and_flex_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_and_stretch_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_and_stretch_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeStart, 10);\n  YGNodeStyleSetMargin(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_with_sibling_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeEnd, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_with_sibling_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(55, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeBottom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_bottom_and_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeBottom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_bottom_and_top_justify_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeBottom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_multiple_children_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetMarginAuto(root_child1, YGEdgeTop);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_multiple_children_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeStyleSetMarginAuto(root_child1, YGEdgeRight);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_and_right_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_and_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_start_and_end_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeStart);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_start_and_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeStart);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeEnd);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_and_right_column_and_center) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_and_right_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_top_and_bottom_stretch) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeBottom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_should_not_be_part_of_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 250);\n  YGNodeStyleSetHeight(root, 250);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetMaxHeight(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_should_not_be_part_of_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 250);\n  YGNodeStyleSetHeight(root, 250);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetMaxWidth(root_child0, 100);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_right_child_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 72);\n  YGNodeStyleSetHeight(root_child0, 72);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_child_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 72);\n  YGNodeStyleSetHeight(root_child0, 72);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_fix_left_auto_right_child_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 72);\n  YGNodeStyleSetHeight(root_child0, 72);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeRight);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_fix_right_child_bigger_than_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 52);\n  YGNodeStyleSetWidth(root, 52);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 72);\n  YGNodeStyleSetHeight(root_child0, 72);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_top_stretching_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeTop);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_left_stretching_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 0);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, margin_auto_overflowing_container) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 150);\n  YGNodeStyleSetMarginAuto(root_child0, YGEdgeBottom);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 150);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGMinMaxDimensionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<1be305ae7864e14b13059dc384b0e7ad>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGMinMaxDimensionTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetMaxWidth(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetMaxHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, min_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMinHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, min_width) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMinWidth(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_min_max) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxHeight(root, 200);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, align_items_min_max) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxWidth(root, 200);\n  YGNodeStyleSetMinWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 60);\n  YGNodeStyleSetHeight(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, justify_content_overflow_min_max) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 110);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 50);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(110, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_to_min) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_in_at_most_container) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 0);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_min_max_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidth(root_child0, 300);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_root_ignored) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 500);\n  YGNodeStyleSetFlexGrow(root, 1);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 200);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 100);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_root_minimized) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetMaxHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinHeight(root_child0, 100);\n  YGNodeStyleSetMaxHeight(root_child0, 500);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 200);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_height_maximized) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 500);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinHeight(root_child0, 100);\n  YGNodeStyleSetMaxHeight(root_child0, 500);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 200);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_min_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_min_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_max_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetMaxWidth(root_child0, 100);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexShrink(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child1, 50);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, flex_grow_within_constrained_max_column) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, child_min_max_width_flexing) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 120);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidth(root_child0, 60);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 0);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMaxWidth(root_child1, 20);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 50);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, min_width_overrides_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 100);\n  YGNodeStyleSetWidth(root, 50);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_width_overrides_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxWidth(root, 100);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, min_height_overrides_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinHeight(root, 100);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, max_height_overrides_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxHeight(root, 100);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, min_max_percent_no_width_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMinWidthPercent(root_child0, 10);\n  YGNodeStyleSetMaxWidthPercent(root_child0, 10);\n  YGNodeStyleSetMinHeightPercent(root_child0, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGPaddingTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<083fc403229eea6402f9859930e468fb>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPaddingTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, padding_no_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, padding_container_match_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, padding_flex_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, padding_stretch_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeAll, 10);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, padding_center_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetPadding(root, YGEdgeStart, 10);\n  YGNodeStyleSetPadding(root, YGEdgeEnd, 20);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 20);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, child_with_padding_align_end) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, physical_and_relative_edge_defined) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 20);\n  YGNodeStyleSetPadding(root, YGEdgeEnd, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(130, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGPercentageTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<bdfa50bfb6be76f42d2cce1d74e06060>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGPercentageTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, percentage_width_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 30);\n  YGNodeStyleSetHeightPercent(root_child0, 30);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_position_left_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 400);\n  YGNodeStyleSetHeight(root, 400);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 45);\n  YGNodeStyleSetHeightPercent(root_child0, 55);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 10);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(260, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(180, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(220, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_position_bottom_right) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 500);\n  YGNodeStyleSetHeight(root, 500);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 55);\n  YGNodeStyleSetHeightPercent(root_child0, 15);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeRight, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(275, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(275, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_cross) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(125, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_cross_min_height) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMinHeightPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 2);\n  YGNodeStyleSetMinHeightPercent(root_child1, 10);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_main_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(148, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(148, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(148, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_cross_max_height) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 10);\n  YGNodeStyleSetMaxHeightPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_main_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 15);\n  YGNodeStyleSetMaxWidthPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 10);\n  YGNodeStyleSetMaxWidthPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_cross_max_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 10);\n  YGNodeStyleSetMaxWidthPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 15);\n  YGNodeStyleSetMaxWidthPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_main_min_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 15);\n  YGNodeStyleSetMinWidthPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 10);\n  YGNodeStyleSetMinWidthPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_flex_basis_cross_min_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 10);\n  YGNodeStyleSetMinWidthPercent(root_child0, 60);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 15);\n  YGNodeStyleSetMinWidthPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_multiple_nested_with_padding_margin_and_percentage_values) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasisPercent(root_child0, 10);\n  YGNodeStyleSetMinWidthPercent(root_child0, 60);\n  YGNodeStyleSetMargin(root_child0, YGEdgeAll, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 3);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeAll, 5);\n  YGNodeStyleSetPaddingPercent(root_child0_child0, YGEdgeAll, 3);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 45);\n  YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeAll, 5);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeAll, 3);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 4);\n  YGNodeStyleSetFlexBasisPercent(root_child1, 15);\n  YGNodeStyleSetMinWidthPercent(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(48, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(58, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(142, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(190, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(48, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(8, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(36, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(6, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(58, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(142, YGNodeLayoutGetHeight(root_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_margin_should_calculate_based_only_on_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetMarginPercent(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_padding_should_calculate_based_only_on_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetPaddingPercent(root_child0, YGEdgeAll, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 10);\n  YGNodeStyleSetHeight(root_child0_child0, 10);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_absolute_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 10);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 30);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_width_height_undefined_parent_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeightPercent(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_within_flex_grow) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetWidth(root, 350);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1_child0, 100);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 100);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(350, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percentage_container_in_wrapping_container) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetAlignItems(root, YGAlignCenter);\n  YGNodeStyleSetWidth(root, 200);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetJustifyContent(root, YGJustifyCenter);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRow);\n  YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyCenter);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1, 50);\n  YGNodeStyleSetHeight(root_child0_child0_child1, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_absolute_position) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0, 100);\n  YGNodeStyleSetPositionPercent(root_child0, YGEdgeLeft, 50);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 100);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child1, 100);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-60, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_minmax_main) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_min_main) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_min_main_multiple) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1, 50);\n  YGNodeStyleSetHeight(root_child1, 20);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child2, 50);\n  YGNodeStyleSetHeight(root_child2, 20);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(-30, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_max_main) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_minmax_cross_stretched) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_absolute_of_minmax_cross_stretched) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_minmax_cross_unstretched) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_min_cross_unstretched) {\n  GTEST_SKIP();\n\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMinWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, percent_of_max_cross_unstretched) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetMaxWidth(root, 60);\n  YGNodeStyleSetHeight(root, 50);\n  YGNodeStyleSetAlignItems(root, YGAlignFlexStart);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGRoundingTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<98ca608a4af5789921a0e4b2078ed950>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGRoundingTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, rounding_flex_basis_flex_grow_row_width_of_100) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(34, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(67, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(67, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(34, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_flex_basis_flex_grow_row_prime_number_width) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 113);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n\n  YGNodeRef root_child3 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child3, 1);\n  YGNodeInsertChild(root, root_child3, 3);\n\n  YGNodeRef root_child4 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child4, 1);\n  YGNodeInsertChild(root, root_child4, 4);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(68, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(68, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetLeft(root_child3));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child3));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child4));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_flex_basis_flex_shrink_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 101);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child0, 100);\n  YGNodeStyleSetFlexShrink(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child1, 25);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexBasis(root_child2, 25);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(101, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(51, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(76, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(101, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(51, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_flex_basis_overrides_main_size) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 113);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_total_fractial) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 113.4f);\n  YGNodeStyleSetWidth(root, 87.4f);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20.3f);\n  YGNodeStyleSetFlexGrow(root_child0, 0.7f);\n  YGNodeStyleSetFlexBasis(root_child0, 50.3f);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1.6f);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10.7f);\n  YGNodeStyleSetFlexGrow(root_child2, 1.1f);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_total_fractial_nested) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 113.4f);\n  YGNodeStyleSetWidth(root, 87.4f);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20.3f);\n  YGNodeStyleSetFlexGrow(root_child0, 0.7f);\n  YGNodeStyleSetFlexBasis(root_child0, 50.3f);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPosition(root_child0_child0, YGEdgeBottom, 13.3f);\n  YGNodeStyleSetHeight(root_child0_child0, 9.9f);\n  YGNodeStyleSetFlexGrow(root_child0_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0_child0, 0.3f);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPosition(root_child0_child1, YGEdgeTop, 13.3f);\n  YGNodeStyleSetHeight(root_child0_child1, 1.1f);\n  YGNodeStyleSetFlexGrow(root_child0_child1, 4);\n  YGNodeStyleSetFlexBasis(root_child0_child1, 0.3f);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1.6f);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10.7f);\n  YGNodeStyleSetFlexGrow(root_child2, 1.1f);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-13, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(47, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(-13, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(47, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_fractial_input_1) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 113.4f);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_fractial_input_2) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 113.6f);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_fractial_input_3) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root, YGEdgeTop, 0.3f);\n  YGNodeStyleSetHeight(root, 113.4f);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_fractial_input_4) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root, YGEdgeTop, 0.7f);\n  YGNodeStyleSetHeight(root, 113.4f);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 20);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeStyleSetFlexBasis(root_child0, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_inner_node_controversy_horizontal) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 320);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child1_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child1_child0, 1);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_inner_node_controversy_vertical) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 320);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1, 10);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child1_child0, 10);\n  YGNodeStyleSetFlexGrow(root_child1_child0, 1);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child2, 10);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, rounding_inner_node_controversy_combined) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 640);\n  YGNodeStyleSetHeight(root, 320);\n  YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0, 100);\n  YGNodeStyleSetFlexGrow(root_child0, 1);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child1, 100);\n  YGNodeStyleSetFlexGrow(root_child1, 1);\n  YGNodeInsertChild(root, root_child1, 1);\n\n  YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1_child0, 100);\n  YGNodeStyleSetFlexGrow(root_child1_child0, 1);\n  YGNodeInsertChild(root_child1, root_child1_child0, 0);\n\n  YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1_child1, 100);\n  YGNodeStyleSetFlexGrow(root_child1_child1, 1);\n  YGNodeInsertChild(root_child1, root_child1_child1, 1);\n\n  YGNodeRef root_child1_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetFlexGrow(root_child1_child1_child0, 1);\n  YGNodeStyleSetWidthPercent(root_child1_child1_child0, 100);\n  YGNodeInsertChild(root_child1_child1, root_child1_child1_child0, 0);\n\n  YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child1_child2, 100);\n  YGNodeStyleSetFlexGrow(root_child1_child2, 1);\n  YGNodeInsertChild(root_child1, root_child1_child2, 2);\n\n  YGNodeRef root_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child2, 100);\n  YGNodeStyleSetFlexGrow(root_child2, 1);\n  YGNodeInsertChild(root, root_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(640, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(427, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(640, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(427, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child0));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1_child1));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1_child0));\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child1_child2));\n  ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child2));\n  ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child2));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));\n  ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child2));\n  ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGSizeOverflowTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<e6b896cbc58c0c1835736d70c7d5a6a1>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGSizeOverflowTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, nested_overflowing_child) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, nested_overflowing_child_in_constraint_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeight(root, 100);\n  YGNodeStyleSetWidth(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, parent_wrap_child_size_overflowing_parent) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetHeight(root, 100);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/generated/YGStaticPositionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * clang-format off\n * @generated SignedSource<<d64ebeb4093d621b007f72766e734b55>>\n * generated by gentest/src/GentestDriver.ts from gentest/fixtures/YGStaticPositionTest.html\n */\n\n#include <gtest/gtest.h>\n#include <yoga/Yoga.h>\n#include \"../util/TestUtil.h\"\n\nTEST(YogaTest, static_position_insets_have_no_effect_left_top) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeStyleSetPosition(root_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_insets_have_no_effect_right_bottom) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 100);\n  YGNodeStyleSetHeight(root_child0, 100);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeStatic);\n  YGNodeStyleSetPosition(root_child0, YGEdgeBottom, 50);\n  YGNodeStyleSetPosition(root_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_insets_relative_to_positioned_ancestor) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_insets_relative_to_positioned_ancestor_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_row) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, column_reverse_static_position_absolute_child_insets_relative_to_positioned_ancestor_column_reverse) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_insets_relative_to_positioned_ancestor_deep) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 100);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPositionType(root_child0_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0_child0, 100);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0_child0, YGEdgeLeft, 100);\n  YGNodeStyleSetPositionType(root_child0_child0_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0_child0_child0, root_child0_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPosition(root_child0_child0_child0_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root_child0_child0_child0_child0_child0, root_child0_child0_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-350, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_width_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_width_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_width_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_height_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_height_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_height_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_left_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_left_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_left_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_right_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_right_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_right_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeRight, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_top_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_top_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_top_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeTop, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_bottom_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeBottom, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_bottom_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeBottom, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_bottom_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeBottom, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_margin_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_margin_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_margin_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_padding_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPaddingPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_padding_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPaddingPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_padding_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPaddingPercent(root_child0_child0_child0, YGEdgeAll, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_border_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_border_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_border_percentage) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 200);\n  YGNodeStyleSetHeight(root_child0, 200);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidth(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_containing_block_padding_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_containing_block_padding_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_containing_block_padding_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_containing_block_content_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_relative_child_containing_block_content_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 50);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_child_containing_block_content_box) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_containing_block_padding_and_border) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 8);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 1);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 61);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(13, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(239, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(292, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(13, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-60, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(160, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(239, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-2, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_no_position_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-15, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_zero_for_inset_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 0);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-1, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-265, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_start_inset_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeStart, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(11, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-2, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_end_inset_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 500);\n  YGNodeStyleSetHeight(root_child0, 500);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 200);\n  YGNodeStyleSetWidth(root_child0_child0, 200);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 63);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 41);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeEnd, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(270, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(513, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(506, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(279, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-261, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(306, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_row_reverse_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionRowReverse);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetHeightPercent(root_child0_child0_child0, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-128, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(133, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(133, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(23, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_column_reverse_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetFlexDirection(root_child0_child0, YGFlexDirectionColumnReverse);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-82, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-15, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(-82, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_justify_flex_start_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(111, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_justify_flex_start_position_set_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 30);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(106, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_no_definite_size_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 23);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(133, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(133, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_both_insets_set_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetPositionPercent(root_child0_child0_child0, YGEdgeLeft, 23);\n  YGNodeStyleSetPosition(root_child0_child0_child0, YGEdgeRight, 13);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(9, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(69, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(79, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(56, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(73, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(22, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(-3, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_justify_center_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyCenter);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(85, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(111, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(85, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_justify_flex_end_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetJustifyContent(root_child0_child0, YGJustifyFlexEnd);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(111, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_align_flex_start_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetAlignItems(root_child0_child0, YGAlignFlexStart);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(111, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_align_center_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetAlignItems(root_child0_child0, YGAlignCenter);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(65, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(39, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_align_flex_end_amalgamation) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 9);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 6);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 7);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 8);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 9);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 13);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 2);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeTop, 6);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 3);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeTop, 10);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0_child0, YGEdgeLeft, 8);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeRight, 9);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0_child0, YGEdgeLeft, 1);\n  YGNodeStyleSetAlignItems(root_child0_child0, YGAlignFlexEnd);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 21);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child0_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child0_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child0_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child0_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child1, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1);\n\n  YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child1_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child1_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child1_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child1_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child2, 10);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child2, 2);\n\n  YGNodeRef root_child0_child0_child2_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0_child0_child2_child0, 100);\n  YGNodeStyleSetHeight(root_child0_child0_child2_child0, 50);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeTop, 12);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeRight, 4);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeBottom, 7);\n  YGNodeStyleSetMargin(root_child0_child0_child2_child0, YGEdgeLeft, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeTop, 1);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeRight, 5);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeBottom, 9);\n  YGNodeStyleSetBorder(root_child0_child0_child2_child0, YGEdgeLeft, 2);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeTop, 3);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeRight, 8);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeBottom, 10);\n  YGNodeStyleSetPadding(root_child0_child0_child2_child0, YGEdgeLeft, 5);\n  YGNodeInsertChild(root_child0_child0_child2, root_child0_child0_child2_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(111, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(131, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(215, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(301, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(4, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(202, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(295, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(166, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(244, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(-77, YGNodeLayoutGetLeft(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(29, YGNodeLayoutGetTop(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child1));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child1));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child2));\n  ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child0_child0_child2));\n\n  ASSERT_FLOAT_EQ(-97, YGNodeLayoutGetLeft(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child2_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child2_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_static_root) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root, 200);\n  YGNodeStyleSetWidth(root, 100);\n  YGNodeStyleSetPositionType(root, YGPositionTypeStatic);\n  YGNodeStyleSetPadding(root, YGEdgeTop, 1);\n  YGNodeStyleSetPadding(root, YGEdgeRight, 11);\n  YGNodeStyleSetPadding(root, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root, YGEdgeLeft, 6);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeightPercent(root_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0, 50);\n  YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);\n  YGNodeStyleSetBorder(root_child0, YGEdgeTop, 3);\n  YGNodeStyleSetBorder(root_child0, YGEdgeRight, 2);\n  YGNodeStyleSetBorder(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetBorder(root_child0, YGEdgeLeft, 4);\n  YGNodeStyleSetPadding(root_child0, YGEdgeTop, 7);\n  YGNodeStyleSetPadding(root_child0, YGEdgeRight, 5);\n  YGNodeStyleSetPadding(root_child0, YGEdgeBottom, 4);\n  YGNodeStyleSetPadding(root_child0, YGEdgeLeft, 3);\n  YGNodeStyleSetMargin(root_child0, YGEdgeTop, 11);\n  YGNodeStyleSetMargin(root_child0, YGEdgeRight, 15);\n  YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 1);\n  YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 12);\n  YGNodeInsertChild(root, root_child0, 0);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(18, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(24, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n\nTEST(YogaTest, static_position_absolute_child_multiple) {\n  YGConfigRef config = YGConfigNew();\n\n  YGNodeRef root = YGNodeNewWithConfig(config);\n  YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);\n\n  YGNodeRef root_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetWidth(root_child0, 400);\n  YGNodeStyleSetHeight(root_child0, 400);\n  YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);\n  YGNodeInsertChild(root, root_child0, 0);\n\n  YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0, 100);\n  YGNodeStyleSetWidth(root_child0_child0, 100);\n  YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child0, 0);\n\n  YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child0_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child0_child0, 10);\n  YGNodeStyleSetPositionType(root_child0_child0_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);\n\n  YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1, 100);\n  YGNodeStyleSetWidth(root_child0_child1, 100);\n  YGNodeStyleSetPositionType(root_child0_child1, YGPositionTypeStatic);\n  YGNodeInsertChild(root_child0, root_child0_child1, 1);\n\n  YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1_child0, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child1_child0, 50);\n  YGNodeStyleSetPositionType(root_child0_child1_child0, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);\n\n  YGNodeRef root_child0_child1_child1 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child1_child1, 50);\n  YGNodeStyleSetWidthPercent(root_child0_child1_child1, 50);\n  YGNodeStyleSetPositionType(root_child0_child1_child1, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0_child1, root_child0_child1_child1, 1);\n\n  YGNodeRef root_child0_child2 = YGNodeNewWithConfig(config);\n  YGNodeStyleSetHeight(root_child0_child2, 50);\n  YGNodeStyleSetWidth(root_child0_child2, 25);\n  YGNodeStyleSetPositionType(root_child0_child2, YGPositionTypeAbsolute);\n  YGNodeInsertChild(root_child0, root_child0_child2, 2);\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1_child1));\n\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root));\n\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetWidth(root_child0));\n  ASSERT_FLOAT_EQ(400, YGNodeLayoutGetHeight(root_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));\n\n  ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child0_child0));\n\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child0_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1_child0));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1_child0));\n\n  ASSERT_FLOAT_EQ(-100, YGNodeLayoutGetLeft(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0_child1_child1));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child1_child1));\n\n  ASSERT_FLOAT_EQ(275, YGNodeLayoutGetLeft(root_child0_child2));\n  ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0_child2));\n  ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child0_child2));\n  ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0_child2));\n\n  YGNodeFreeRecursive(root);\n\n  YGConfigFree(config);\n}\n"
  },
  {
    "path": "tests/util/TestUtil.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"TestUtil.h\"\n\n#include <yoga/YGEnums.h>\n#include <yoga/YGNode.h>\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n#include <iostream>\n#include <sstream>\n#include <string>\n#include <string_view>\n\nnamespace facebook::yoga::test {\n\nint nodeInstanceCount = 0;\n\nnamespace {\n\nvoid yogaEventSubscriber(\n    YGNodeConstRef /*node*/,\n    Event::Type eventType,\n    const Event::Data& /*eventData*/) {\n  switch (eventType) {\n    case Event::NodeAllocation:\n      nodeInstanceCount++;\n      break;\n    case Event::NodeDeallocation:\n      nodeInstanceCount--;\n      break;\n    default:\n      break;\n  }\n}\n} // namespace\n\nvoid TestUtil::startCountingNodes() {\n  nodeInstanceCount = 0;\n  Event::subscribe(yogaEventSubscriber);\n}\n\nint TestUtil::nodeCount() {\n  return nodeInstanceCount;\n}\n\nint TestUtil::stopCountingNodes() {\n  Event::reset();\n  auto prev = nodeInstanceCount;\n  nodeInstanceCount = 0;\n  return prev;\n}\n\nScopedEventSubscription::ScopedEventSubscription(\n    std::function<Event::Subscriber>&& s) {\n  Event::subscribe(std::move(s));\n}\n\nScopedEventSubscription::~ScopedEventSubscription() {\n  Event::reset();\n}\n\nYGSize IntrinsicSizeMeasure(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode) {\n  std::string_view innerText((char*)YGNodeGetContext(node));\n  float heightPerChar = 10;\n  float widthPerChar = 10;\n  float measuredWidth;\n  float measuredHeight;\n\n  if (widthMode == YGMeasureModeExactly) {\n    measuredWidth = width;\n  } else if (widthMode == YGMeasureModeAtMost) {\n    measuredWidth = std::min((float)innerText.size() * widthPerChar, width);\n  } else {\n    measuredWidth = (float)innerText.size() * widthPerChar;\n  }\n\n  if (heightMode == YGMeasureModeExactly) {\n    measuredHeight = height;\n  } else if (heightMode == YGMeasureModeAtMost) {\n    measuredHeight = std::min(\n        calculateHeight(\n            innerText,\n            YGNodeStyleGetFlexDirection(node) == YGFlexDirectionColumn\n                ? measuredWidth\n                : std::max(\n                      longestWordWidth(innerText, widthPerChar), measuredWidth),\n            widthPerChar,\n            heightPerChar),\n        height);\n  } else {\n    measuredHeight = calculateHeight(\n        innerText,\n        YGNodeStyleGetFlexDirection(node) == YGFlexDirectionColumn\n            ? measuredWidth\n            : std::max(\n                  longestWordWidth(innerText, widthPerChar), measuredWidth),\n        widthPerChar,\n        heightPerChar);\n  }\n\n  return YGSize{measuredWidth, measuredHeight};\n}\n\nfloat longestWordWidth(std::string_view text, float widthPerChar) {\n  int maxLength = 0;\n  int currentLength = 0;\n  for (auto c : text) {\n    if (c == ' ') {\n      maxLength = std::max(currentLength, maxLength);\n      currentLength = 0;\n    } else {\n      currentLength++;\n    }\n  }\n  return (float)std::max(currentLength, maxLength) * widthPerChar;\n}\n\nfloat calculateHeight(\n    std::string_view text,\n    float measuredWidth,\n    float widthPerChar,\n    float heightPerChar) {\n  if ((float)text.size() * widthPerChar <= measuredWidth) {\n    return heightPerChar;\n  }\n\n  std::vector<std::string> words;\n  std::istringstream iss((std::string)text);\n  std::string currentWord;\n  while (getline(iss, currentWord, ' ')) {\n    words.push_back(currentWord);\n  }\n\n  float lines = 1;\n  float currentLineLength = 0;\n  for (const std::string& word : words) {\n    float wordWidth = (float)word.length() * widthPerChar;\n    if (wordWidth > measuredWidth) {\n      if (currentLineLength > 0) {\n        lines++;\n      }\n      lines++;\n      currentLineLength = 0;\n    } else if (currentLineLength + wordWidth <= measuredWidth) {\n      currentLineLength += wordWidth + widthPerChar;\n    } else {\n      lines++;\n      currentLineLength = wordWidth + widthPerChar;\n    }\n  }\n  return (currentLineLength == 0 ? lines - 1 : lines) * heightPerChar;\n}\n\n} // namespace facebook::yoga::test\n"
  },
  {
    "path": "tests/util/TestUtil.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/YGNode.h>\n#include <yoga/event/event.h>\n#include <functional>\n#include <string_view>\n\nnamespace facebook::yoga::test {\n\nstruct TestUtil {\n  static void startCountingNodes();\n  static int nodeCount();\n  static int stopCountingNodes();\n};\n\nstruct ScopedEventSubscription {\n  explicit ScopedEventSubscription(std::function<Event::Subscriber>&& s);\n  ~ScopedEventSubscription();\n};\n\nYGSize IntrinsicSizeMeasure(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode);\n\nfloat longestWordWidth(std::string_view text, float widthPerChar);\n\nfloat calculateHeight(\n    std::string_view text,\n    float measuredWidth,\n    float widthPerChar,\n    float heightPerChar);\n\n} // namespace facebook::yoga::test\n"
  },
  {
    "path": "unit_tests",
    "content": "#!/bin/sh\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")/tests\"\n\nif [ \"$#\" -eq 0 ]; then\n  build_type=\"Debug\"\nelse\n  build_type=\"$1\"\nfi\n\nif which ninja; then\n  set -e\n  cmake -B build -S . -D CMAKE_BUILD_TYPE=\"$build_type\" -G Ninja\nelse\n  set -e\n  cmake -B build -S . -D CMAKE_BUILD_TYPE=\"$build_type\"\nfi\n\ncmake --build build\n\n./build/yogatests\n"
  },
  {
    "path": "unit_tests.bat",
    "content": "@REM Copyright (c) Meta Platforms, Inc. and affiliates.\n@REM\n@REM This source code is licensed under the MIT license found in the\n@REM LICENSE file in the root directory of this source tree.\n\n@echo off\nSETLOCAL\n\ncd \"%0\\..\\tests\"\n\nif \"%1\" == \"\" (\n  set build_type=\"Debug\"\n) else (\n  set build_type=\"%1\"\n)\n\nwhere ninja\nif errorlevel 1 (\n  cmake -B build -S . -D CMAKE_BUILD_TYPE=\"%build_type%\"\n) else  (\n  cmake -B build -S . -D CMAKE_BUILD_TYPE=\"%build_type%\" -G Ninja\n)\nif %errorlevel% neq 0 exit /b %errorlevel%\n\ncmake --build build\nif %errorlevel% neq 0 exit /b %errorlevel%\n\n.\\build\\yogatests.exe\n"
  },
  {
    "path": "website/.eslintrc.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nmodule.exports = {\n  root: false,\n  extends: [\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  settings: {\n    react: {\n      version: 'detect',\n    },\n  },\n  rules: {\n    'react/prop-types': 'off',\n    'react/no-unstable-nested-components': 'error',\n  },\n};\n"
  },
  {
    "path": "website/.gitignore",
    "content": "# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "website/README.md",
    "content": "# Website\n\nThis website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.\n\n### Installation\n\n```\n$ yarn\n```\n\n### Local Development\n\n```\n$ yarn start\n```\n\nThis command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.\n\n### Build\n\n```\n$ yarn build\n```\n\nThis command generates static content into the `build` directory and can be served using any static contents hosting service.\n\n### Deployment\n\nUsing SSH:\n\n```\n$ USE_SSH=true yarn deploy\n```\n\nNot using SSH:\n\n```\n$ GIT_USER=<Your GitHub username> yarn deploy\n```\n\nIf you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.\n"
  },
  {
    "path": "website/babel.config.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = {\n  presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
  },
  {
    "path": "website/blog/2023-06-30-announcing-yoga-2.0.md",
    "content": "---\nslug: announcing-yoga-2.0\ntitle: Announcing Yoga 2.0\nauthors:\n  - NickGerleman\n---\n\nWe are excited to announce a new major (breaking) version of Yoga. This release contains 198 new commits from 64 contributors, and includes the first significant changes to Yoga in open-source since 2018.\n\nWhile there has been a [long gap in development](https://github.com/facebook/yoga/issues/1151), the React Native team believes Yoga is a critical tool in delivering the future of React, and we have resumed development of the engine. This release of Yoga is focused on:\n1. Delivering the features we have shipped to React Native to standalone Yoga users\n2. Updating toolchains, packaging, and build systems to make Yoga easier to consume\n3. API changes to allow us to evolve the engine towards conformance\n\nYoga continuously ships to thousands of surfaces across multiple frameworks at Meta. This version of Yoga corresponds to the version which will be included in React Native 0.73 shipping this fall.\n\n\n## Flexbox gap\n\nThe most significant new feature for users on an older stable release of Yoga is the addition of Flexbox gap support. This powers `gap`, `rowGap`, and `columnGap` in React Native 0.71.\n\n```cpp\n// Example.cpp\nYGNodeStyleSetGap(node, YGGutterRow, 2.0f);\n```\n\n```java\n// Example.java\nnode.setGap(YogaGutter.ROW, 2.0f);\n```\n\n```ts\n// Example.ts\nnode.setGap(Gutter.Row, 2);\n```\n\n\n## Toolchain\n\nMeta uses [Buck](https://buck.build/) across its monorepo, but we recognize that Buck has acted as a barrier to be able to use Yoga outside of Meta. Yoga no longer ships build logic for Buck to open-source. We have instead added over 20 new validation jobs to GitHub Actions to continually validate that Yoga builds correctly in common systems and scenarios where Yoga is used in OSS.\n\nNew toolchain support includes:\n1. A reference CMake build for Yoga and its unit tests\n1. A modern Gradle build and published AARs\n1. Compatibility with XCode 14.3+\n1. Compatibility with Node 16+\n1. Support for WebAssembly in both Node and browsers\n1. Support for MSVC, higher warning levels, and building without exceptions\n\n## Aiming for Conformance\n\nOur team wants to enable engineers to be able to create a single style which renders faithfully across Yoga and web. Conformance is a moving target, with browsers like Chromium regularly making behavior changes to better achieve it. This requires making behavior changes to Yoga which break existing behaviors, for better consistency with the web.\n\nIn Yoga 2.0, we’ve generalized `UseLegacyStretchBehaviour` to a new [Errata API](https://github.com/facebook/yoga/issues/1247), to allow different parts of a Yoga tree to target different conformance levels. This allows rendering part of the tree to be compatible with styles written for web, with other parts compatible with styles written for older versions of Yoga.\n\nYoga's default behavior going forward is W3C compliance. We recommend users sensitive to the change to set `YGErrataClassic,` or `YGErrataAll` if you were already setting `UseLegacyStretchBehaviour`.\n\n```cpp\n// Example.cpp\nYGConfigRef config = YGConfigNew();\nYGConfigSetErrata(config, YGErrataClassic);\n\nYGNodeRef node = YGNodeNewWithConfig(config);\n```\n\n```java\n// Example.java\nYogaConfig config = YogaConfigFactory.create();\nconfig.setErrata(YogaErrata.CLASSIC);\n\nYogaNode node = YogaNodeFactory.create(config);\n```\n\n```ts\n// Example.ts\nconst config = Config.create();\nconfig.setErrata(Errata.Classic);\n\nconst node = Node.create(config);\n```\n\n## Yoga for JavaScript\n\nYoga’s previous JavaScript bindings are not installable when using Node 12+, making them effectively unusable in today’s JavaScript ecosystem. We now ship a new package with prebuilt binaries and first-class support for TypeScript and modern bundlers.\n\nTwo variants are shipped:\n\n1. An asmjs variant for compatibility\n1. A JS module with embedded WebAssembly (~50% faster)\n\nBoth are about 45KB when gzipped.\n\n\nWebAssembly binaries must be asynchronously compiled and loaded in Chrome. In the absence of universal support for top-level await, we have made the breaking change to require explicitly asynchronously loading Yoga before using it.\n\n```ts\nimport {loadYoga, Align} from 'yoga-layout';\n\nconst Yoga = await loadYoga();\nconst node = Yoga.Node.create();\nnode.setAlignContent(Align.Center);\n```\n\n\nThe previous behavior of blocking to load the binary can be replicated by importing from the  `yoga-layout/sync` entrypoint, but this is not recommended for new usages, and does not allow using WebAssembly on browsers.\n\n```ts\nimport Yoga, {ALIGN_CENTER} from 'yoga-layout/sync';\n\nconst node = Yoga.Node.create();\nnode.setAlignContent(ALIGN_CENTER);\n```\n\n`yoga-layout` and `yoga-layout/sync` try to pick between `asmjs` and `WebAssembly` automatically based on the [target environment](https://webpack.js.org/guides/package-exports/#target-environment) set by your bundler, but you can choose this explicitly as well.\n\n```ts\nimport {loadYoga} from 'yoga-layout/wasm-async';\n```\n\n> Note: the `yoga-layout` package requires your bundler and typechecker to configured to be able to follow the package `exports `field.\n\n\n## Deprecations and removals\n\n### YogaKit and YogaLayout ViewGroup\nWe are deprecating, `YogaKit` and the `YogaLayout` ViewGroup. These libraries allow initegrating Yoga directly with UIKit and the Android view system, but are not widely used by Meta in production. We are instead focusing on higher-level libraries using Yoga like [Litho](https://fblitho.com/) and [React Native](https://reactnative.dev/). Because we aren’t in a place to continue development, or validate contributions, we are discontinuing development. These libraries will not receive future updates beyond the Yoga `release-v2.0` branch.\n\n### UseLegacyStretchBehaviour\nThe functions to manipulate `UseLegacyStretchBehaviour` have been deprecated. Previous users of the API should now set an appropriate errata level, like `YGErrataAll` to opt-out of all future conformance fixes.\n\n### C# bindings\nC# bindings were contributed to the Yoga repo but have since degraded. The bindings have not had working build validation, or a consistent contributor. We have removed them from the Yoga repo, but we will continue to provide a public C ABI for others to build bindings on top of.\n\n### Private C++ APIs\nYoga’s header structure has historically allowed the inclusion of concrete internal structures like `YGStyle` or `YGNode`. We will begin to enforce that users instead rely on the public C APIs provided by `#include <yoga/Yoga.h>`. Other C++ APIs may change without notice.\n\n```cpp\n// Public API (GOOD)\n#include <yoga/Yoga.h>\n\nYGConfigRef config = YGConfigNew();\nYGConfigSetPointScaleFactor(config, 1.0f);\n```\n\n```cpp\n// Private API (BAD)\n#include <yoga/YGConfig.h>\n\nYGConfig config{yogaLogger_};\nconfig.pointScaleFactor = 1.0f;\n```\n\n\n### C++ 11 Support\n\nYoga now requires a compiler which supports C++ 14. This will likely be bumped to C++ 17 in a future minor release.\n\n\n## How do I get it?\n\nFor users who don’t want to build from source, new Yoga packages have been published to the npmjs registry, Maven Central, and CocoaPods.\n\n```json5\n// package.json\ndependencies: {\n  \"yoga-layout\": \"^2.0.0\"\n}\n```\n\n```gradle\n// build.gradle\ndependencies {\n  implementation(\"com.facebook.yoga:yoga:2.0.0\")\n}\n```\n\n```rb\n# Podfile\npod 'Yoga', '~> 2.0.0'\n```\n\n\n## Acknowledgements\n\nYoga 2.0 contains major external contributions from [@intergalacticspacehighway](https://github.com/intergalacticspacehighway), [@jacobp100](https://github.com/jacobp100), [@jeetiss](https://github.com/jeetiss) and [@nicoburns](https://github.com/nicoburns).\n"
  },
  {
    "path": "website/blog/2024-06-24-announcing-yoga-3.1.md",
    "content": "---\nslug: announcing-yoga-3.1\ntitle: Announcing Yoga 3.1\nauthors:\n  - NickGerleman\n---\n\nimport Playground from '@site/src/components/Playground';\n\nYoga 3.1 is a new minor version of Yoga, used by React Native 0.75.\n\n## Highlights\n\n1. Percentage support for `gap` properties\n2. Layout conformance and regression fixes\n3. Additional JavaScript bindings\n\n## Percentage support for `gap` properties\n\nYoga [now supports](https://github.com/facebook/yoga/commit/cd4a1b8cf63cf09a62d6aefcd16843cc8869488c) gap values specified as percentages instead of points.\n\n:::warning\n\nPercentages in Yoga do not always act consistently with browsers when a definite container size is not provided. This may be improved in a future version of Yoga.\n\n:::\n\n<Playground code={`<Layout config={{useWebDefaults: true}}>\n  <Node\n    style={{\n      columnGap: \"10%\",\n      width: 200,\n      height: 100,\n    }}>\n    <Node style={{flexGrow: 1}} />\n    <Node style={{flexGrow: 1}} />\n    <Node style={{flexGrow: 1}} />\n  </Node>\n</Layout>`} />\n\n\n\n## Alignment changes to overflowed containers\n\nYoga has made [several](https://github.com/facebook/yoga/commit/932361cdbf5864a2e6929b68154b4ada2ac586d9) [fixes](https://github.com/facebook/yoga/commit/6f10656868c2eca9b2eae55ad754e01e70565f69) to how flex-children of overflowed containers are aligned when using `justify-content`, `align-content`, or `margin: \"auto\"`. This includes some cases where adding an alignment keyword could cause items to overlap, or padding to be removed.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 100,\n      height: 100,\n      padding: 10,\n      justifyContent: 'space-evenly',\n    }}\n  >\n    <Node style={{height: 100, width: 100}} />\n  </Node>\n</Layout>`} />\n\n\n## Fixes for regressions in Yoga 3.0\n\nWe fixed a couple of regressions added in Yoga 3.0, around percentage insets applied to some absolute containers ([#1657](https://github.com/facebook/yoga/issues/1657)), and start/end resolution when physical edge styles are also present ([#1658](https://github.com/facebook/yoga/issues/1658)).\n\n## Additional JavaScript bindings\n\nWe've added JavaScript bindings for setting layout direction to Yoga 3.1, along with JavaScript additions made in patch releases to Yoga 3.0, including bindings for `hasNewLayout` flag manipulation, and an entrypoint for users who are unable to use top-level await.\n"
  },
  {
    "path": "website/blog/2024-12-02-announcing-yoga-3.2.md",
    "content": "---\nslug: announcing-yoga-3.2\ntitle: Announcing Yoga 3.2\nauthors:\n  - NickGerleman\n---\n\nimport Playground from '@site/src/components/Playground';\n\nYoga 3.2 is a new minor version of Yoga, used by React Native 0.77.\n\n## Highlights\n\n1. Support for `box-sizing`\n2. Support for `display: contents`\n3. Bug fixes and improvements\n\n## `box-sizing`\n\nYoga [now supports](https://github.com/facebook/yoga/commit/671ae61a39d02091d1e73fe773d6a09f2f93cda4) [`box-sizing`](https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing) on styles, allowing sizing values to influence the content box instead of the border box.\n\n:::warning\n\nTo preserve compatibility, Yoga nodes default to `box-sizing: border-box`, even if `UseWebDefaults` is set. We recommend manually setting node defaults instead of using the `UseWebDefaults` API.\n\n:::\n\n<Playground code={`<Layout config={{useWebDefaults: true}}>\n  <Node\n    style={{\n      width: 100,\n      height: 100,\n      padding: 50,\n      boxSizing: \"border-box\",\n    }}>\n  </Node>\n</Layout>`} />\n\n<Playground code={`<Layout config={{useWebDefaults: true}}>\n    <Node\n    style={{\n      width: 100,\n      height: 100,\n      padding: 50,\n      boxSizing: \"content-box\",\n    }}>\n  </Node>\n</Layout>`} />\n\n\n\n## `display: contents`\n\nYoga nodes [may now be set to `display: contents`](https://github.com/facebook/yoga/commit/68bb2343d2b470962065789d09016bba8e785340) to remove them from the layout flow, while preserving and hoisting the node's children. This may be used by the higher level UI framework to allow more easily composing wrapper components (such as those which may need to handle events, without influencing child layout). Thanks [@j-piasecki](https://github.com/j-piasecki) for the contribution!\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 100,\n      height: 100,\n      gap: 10,\n    }}\n  >\n    <Node style={{display: \"contents\"}}>\n      <Node style={{flexGrow: 1}} />\n      <Node style={{flexGrow: 1}} />\n      <Node style={{flexGrow: 1}} />\n    </Node>\n  </Node>\n</Layout>`} />\n\n\n## Removal of legacy absolute positioning\n\nYoga 3.0 introduced a new algorithm used for absolute positioning. This algorithm is more correct than the one previously used, but led to observed compatibility issues with existing code, so we left the option to disable it via the `AbsolutePositioningIncorrect` erratum (enabled by default in frameworks like React Native). Yoga 3.2 removes the legacy absolute positioning path, but ports over the main compatibility quirk under a new erratum `AbsolutePositionWithoutInsetsExcludesPadding` (where the previous incorrect behavior would omit padding when a position was not specified on the absolute node). Errata users should see more correct absolute positioning behavior, while preserving compatibility with existing code.\n\n## Fixed non-global YogaConfig in Java bindings\n\nYoga would previously allow garbage collection of a `YogaConfig` if it was not retained outside of the Yoga tree. This could result in confusing errors caused by use-after free. Yoga nodes [now correctly retain the configs they are using](https://github.com/facebook/yoga/commit/22b018c957e930de950338ad87f4ef8d59e8a169). Thanks [@michaeltroger](https://github.com/michaeltroger) for this fix!\n\n## Fixed behavior when combining `align-items` with `align-content`\n\nA regression [was fixed](https://github.com/facebook/yoga/commit/77c99870127e9c2d46a07264fa372025334d8fd0) in how Yoga handles some combinations of `align-content` and `align-items`. Thanks [@phuccvx12](https://github.com/phuccvx12) for this fix!\n"
  },
  {
    "path": "website/blog/authors.yml",
    "content": "NickGerleman:\n  name: Nick Gerleman\n  title: Yoga Maintainer\n  url: https://github.com/NickGerleman\n  image_url: https://github.com/NickGerleman.png\njoevilches:\n  name: Joe Vilches\n  title: Yoga Maintainer\n  url: https://github.com/joevilches\n  image_url: https://github.com/joevilches.png\n"
  },
  {
    "path": "website/blog/yoga-3-release/2024-03-14-announcing-yoga-3.0.md",
    "content": "---\nslug: announcing-yoga-3.0\ntitle: Announcing Yoga 3.0\nauthors:\n  - NickGerleman\n  - joevilches\n---\n\nYoga 3.0 is a new major (breaking) version of Yoga, used by React Native 0.74.\n\n## Highlights\n\n1. Support for `position: static`\n2. Support for `align-content: space-evenly`\n3. Improvements to layout correctness\n4. Yoga’s JavaScript bindings are now distributed as an ES Module\n5. Fixes several crashes in Java bindings\n6. Some existing Yoga APIs have been removed\n\n## position: static\n\nWe added full support for the `static` position type which has existed in an incomplete state for some time now. With this release `static` is now web-compliant in the context of Flexbox. Some things that were added/changed:\n\n* The default position type is now `relative` [again](https://github.com/facebook/yoga/commit/fc88b2f774f0ab9090d7ca15de6680f26d7285ad) and not `static`. This should not have any effect on layout as the previously introduced `YGPositionTypeStatic` was not being used within Yoga, so it behaved just like `relative`.\n* `static` nodes ignore insets (`left`, `right`, `top`, `bottom`, etc.)\n* The idea of a[ containing block](../../docs/advanced/containing-block) was introduced. For `absolute` nodes this is usually the nearest non-`static` ancestor. For every other position type this is just the parent since Yoga is a Flexbox implementation.\n* A new public API `YGNodeSetAlwaysFormsContainingBlock` which takes a boolean indicating if the node should always form a containing block for any descendant. This is useful for properly supporting things like [transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_transforms), which will force the node to form a containing block but is outside the scope of Yoga.\n\n\n`position: static` affects some concerns outside of layout, like stacking context. The full set of behaviors is enabled in the React Native New Architecture.\n\n\n## Better support for absolute positioning\n\nThere were a variety of bugs with how `absolute` nodes were positioned under various `Justify` and `Align` values. Most of these bugs only ever manifested themselves with certain paddings, margins, and borders so the following examples mix those up to illustrate the differences. Additionally, the following positioning examples all share this core style:\n\n```js\nparent: {\n  backgroundColor: 'green',\n  height: 200,\n  width: 200,\n},\nchild: {\n  position: 'absolute',\n  backgroundColor: 'blue',\n  height: 50,\n  width: 50,\n},\n```\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```js\nparent: {\n  // core styles\n  paddingLeft: 10,\n  paddingRight: 20,\n  borderLeftWidth: 10,\n  borderRightWidth: 20,\n  alignItems: 'flex-start',\n},\nchild: {\n  // core styles\n  paddingLeft: 10,\n  paddingRight: 20,\n  marginLeft: 10,\n  marginRight: 20,\n  borderLeftWidth: 10,\n  borderRightWidth: 20,\n}\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image5.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image9.png)\n\n</td>\n\n</tr>\n\n<tr>\n\n<td>\n\n```js\nparent: {\n  // core styles\n  paddingTop: 10,\n  paddingBottom: 20,\n  borderTopWidth: 10,\n  borderBottomWidth: 20,\n  justifyContent: 'center',\n},\nchild: {\n  // core styles\n  paddingTop: 10,\n  paddingBottom: 20,\n  marginTop: 10,\n  marginBottom: 20,\n  borderTopWidth: 10,\n  borderBottomWidth: 20,\n}\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image17.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image7.png)\n\n</td>\n\n</tr>\n\n<tr>\n\n<td>\n\n```js\nparent: {\n  // core styles\n  paddingTop: 10,\n  paddingBottom: 20,\n  borderTopWidth: 10,\n  borderBottomWidth: 20,\n  justifyContent: 'flex-end',\n},\nchild: {\n  // core styles\n  paddingTop: 10,\n  paddingBottom: 20,\n  marginTop: 10,\n  marginBottom: 20,\n  borderTopWidth: 10,\n  borderBottomWidth: 20,\n}\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image6.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image4.png)\n\n</td>\n\n</tr>\n\n</table>\n\n\nThere were other fixes not specifically mentioned above. Because this change may result in layout differences for many real-world scenarios, Yoga may be configured to prefer the legacy behavior, by setting the `AbsolutePositioningIncorrect` erratum. This means this fix is not enabled by default in frameworks like React Native, in order to preserve compatibility.\n\nAdditionally, Yoga will now correctly account for padding when calculating the size of absolutely positioned nodes with percentage lengths.\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```js\nparent: {\n  backgroundColor: 'green',\n  height: 200,\n  width: 200,\n  padding: 50,\n},\nchild: {\n  position: 'absolute',\n  backgroundColor: 'blue',\n  height: '25%',\n  width: '25%',\n},\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image14.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image3.png)\n\n</td>\n\n</tr>\n\n</table>\n\n\nJust like with positioning, this fix may result in layout differences in many cases. Setting the `AbsolutePercentAgainstInnerSize` erratum will preserve the legacy behavior, which is set by default in frameworks like React Native.\n\n\n## Better support for multiline containers\n\nYoga now offers better support for Flexbox containers which span multiple lines.\n\nYoga now supports `align-content: space-evenly`, contributed by [@nicoburns](https://github.com/nicoburns), to distribute line boxes with equal space around them.\n\n![Align Content Values](./img/image8.png)\n\n> https://www.w3.org/TR/css-align-3/#distribution-values\n\nYoga now correctly supports the combination of `align-content` and `align-items` when both cause changes to alignment.\n\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```jsx\n\n<Node\n  style={{\n    width: 300,\n    height: 300,\n    backgroundColor: 'red',\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    alignContent: 'space-around',\n    alignItems: 'flex-end',\n  }}\n>\n  <Node\n    style={{\n      width: 150,\n      height: 50,\n      backgroundColor: 'powderblue',\n    }}\n  />\n  <Node\n    style={{\n      width: 120,\n      height: 100,\n      backgroundColor: 'skyblue',\n    }}\n  />\n  <Node\n    style={{\n      width: 120,\n      height: 50,\n      backgroundColor: 'steelblue',\n    }}\n  />\n</Node>\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image10.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image12.png)\n\n</td>\n\n</tr>\n\n</table>\n\n> https://github.com/facebook/yoga/issues/1008\n\n\nYoga now correctly supports `min-height` set on a multiline container.\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```jsx\n<Node\n  style={{\n    flexDirection: 'row',\n    width: 150,\n    minHeight: 200,\n    backgroundColor: 'blue',\n    flexWrap: 'wrap',\n    justifyContent: 'center',\n    padding: 10,\n    gap: 10,\n  }}\n>\n  <Node\n    style={{\n      backgroundColor: 'red',\n      height: 100,\n      width: 100,\n    }}\n  />\n  <Node\n    style={{\n      backgroundColor: 'red',\n      height: 100,\n      width: 100,\n    }}\n  />\n</Node>\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image15.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image11.png)\n\n</td>\n\n</tr>\n\n</table>\n\n\n## Correct handling of logical edges in row-reverse containers\n\nYoga would previously incorrectly reverse `start` and `end` edges, when operating on:\n\n1. The padding, border, or margin of a row-reverse container\n2. The position, of the child of a row-reverse container\n\nIn React Native, this also presents as `left` and `right` edges being swapped inside of row-reverse containers.\n\nWe determined that few enough surfaces are impacted by this bug to enable the correct behavior globally. Existing row-reverse containers which run into these cases may need to be updated to layout correctly in newer versions of Yoga.\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```jsx\n<Node\n  style={{\n    flexDirection: 'row',\n    backgroundColor: 'red',\n    margin: 10,\n    width: 200,\n    height: 100,\n  }}\n>\n  <Node\n    style={{\n      flexDirection: 'row-reverse',\n      backgroundColor: 'blue',\n      flex: 1,\n      marginStart: 50,\n    }}\n  >\n    <Node\n      style={{\n        backgroundColor: 'green',\n        height: '50%',\n        flex: 1,\n        marginStart: 50,\n      }}\n    />\n  </Node>\n</Node>\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image1.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image2.png)\n\n</td>\n\n</tr>\n\n</table>\n\n## Correct main-axis size calculation for indefinite containers using `justify-content`\n\nYoga previously calculated an incorrect main-axis size for containers which specified a min-dimension on the main axis, and have a `justify-content` of `space-around` or `space-between`.\n\n\n<table>\n\n<tr>\n<td>Style</td><td>Before</td><td>After</td>\n</tr>\n\n<tr>\n\n<td>\n\n```jsx\n<Node\n  style={{\n    flexDirection: 'row',\n    backgroundColor: 'red',\n    height: 75,\n    minWidth: 200,\n    gap: 10,\n    padding: 10,\n    justifyContent: 'space-between',\n    alignItems: 'center',\n  }}\n>\n  <Node\n    style={{\n      backgroundColor: 'blue',\n      width: 50,\n      height: 50,\n    }}\n  />\n  <Node\n    style={{\n      backgroundColor: 'blue',\n      width: 50,\n      height: 50,\n    }}\n  />\n</Node>\n\n```\n\n</td>\n\n<td>\n\n![Previous layout](./img/image16.png)\n\n</td>\n\n<td>\n\n![New layout](./img/image13.png)\n\n</td>\n\n</tr>\n\n</table>\n\nThis change was observed to impact existing layouts rarely enough to enable globally, and while this change was not present in Yoga 2.0, it was present in the version of Yoga ultimately shipped in React Native 0.73.\n\n\n## Distribution as an ES Module\n\nYoga’s previous JavaScript package exported a convoluted matrix of different binaries, across asm.js and wasm, sync vs async, and browser vs node.\n\nWhen it came time to look at adding ES Module support into the mix, we decided to take a [forward looking approach](https://github.com/WebAssembly/esm-integration/tree/main/proposals/esm-integration), and distribute Yoga as an ES Module, using top-level await, loading WebAssembly. This allows distributing a single binary which presents a sync looking API, even in browsers.\n\nThe underlying binary is still distributed as a JavaScript blob of base64 encoded WebAssembly, usable across different environments and bundlers.\n\n\n## Java reliability improvements\n\nSeveral crashes have been fixed in Yoga’s Java bindings:\n\n1. Yoga for Java [no longer performs an invalid read](https://github.com/facebook/yoga/commit/38ad93c87baa2127872892a6da674fc93e84f4b8) if a message is logged\n2. Yoga for Java now makes [more efficient use of JNI references](https://github.com/facebook/yoga/commit/49fbd406b62566d8b243297725d3485d9de9d442). This can help avoid app crashes in large trees, or interaction with other layout systems also using JNI.\n\n\n\n## Infrastructure changes\n\nYoga’s implementation now targets a well-supported subset of C++ 20. Supported toolchains include:\n\n1. MSVC 2019+\n2. Clang/libc++ 14+\n3. GCC/libstdc++ 11+\n4. Android NDK 26+\n5. XCode 14.3+\n\nYoga’s reference Android build and accompanying artifacts now target Android SDK 34.\n\nYoga now compiles cleanly against higher warning levels, such as `-Wextra` and `-Wconversion` in Clang/GCC, and `/W4` in MSVC.\n\n\n## Deprecations and removals\n\n\n### Changes to C++ APIs\n\nYoga’s previous structure made it easy to intermingle Yoga’s public APIs, and Yoga’s C++ implementation structures. The boundary between these two has been made firmer.\n\n1. Every top-level header is now a public API\n2. All public APIs may be used from C, C++, Objective C, and Swift\n\n\nWe have made some minor changes to this public API, which will require changes for Yoga integrators. The most significant is an increased const-correctness, which may require mechanical changes to measure functions. Yoga’s internal implementation has seen more radical changes.\n\n\n### Removal of `UseLegacyStretchBehaviour`\n\nAPIs related to `UseLegacyStretchBehaviour` were deprecated as part of Yoga 2.0, and have now been removed. Users of `UseLegacyStretchBehaviour` should most often [set their errata level](../../docs/getting-started/configuring-yoga#layout-conformance-and-yoga-errata) to `All` to opt-out of future conformance fixes.\n\n\n### Removal of YogaKit and the YogaLayout ViewGroup\n\nYoga previously provided direct integrations with UIKit, and the Android View System. These were deprecated as part of Yoga 2.0 and are no longer published as part of Yoga 3.0.\n\n### Per-node `PointScaleFactor`\n\nYoga would previously only ever read the `PointScaleFactor` associated with the root node, even if child nodes configured a different value. Yoga now respects the `PointScaleFactor` associated with a given node. This change may be breaking for code which previously set a scale factor on a config used by the root node, where a different value was provided to child nodes.\n\n## Integrating Yoga into your project\n\nYoga includes a reference CMake build, and has official bindings published across several package managers:\n\n**JavaScript**\n\n```json\n// package.json\n{\n  \"dependencies\": {\n    \"yoga-layout\": \"^3.0.0\"\n   }\n}\n```\n\n**Android**\n\n```kts\n// build.gradle.kts\ndependencies {\n  implementation(\"com.facebook.yoga:yoga:3.0.0\")\n}\n```\n\n**CocoaPods**\n\n```rb\n# Podfile\npod 'Yoga', '~> 3.0.0'\n```\n\n**SwiftPM** (new, contributed by [@cntrump](https://github.com/cntrump))\n\n```swift\n// Package.swift\nimport PackageDescription\n\nlet package = Package(\n    dependencies: [\n        .package(url: \"https://github.com/facebook/yoga.git\", from: \"3.0.0\")\n    ],\n)\n```\n"
  },
  {
    "path": "website/docs/about-yoga.md",
    "content": "---\nsidebar_position: 1\n---\n\n# About Yoga\n\nYoga is an embeddable layout system used in popular UI frameworks like React Native. Yoga itself is not a UI framework, and does not do any drawing itself. Yoga's only responsibility is determining the size and position of boxes.\n\n![layout wireframe](./img/wireframe-example.svg)\n\nYoga supports a familiar subset of CSS, mostly focused on Flexbox. This gives users a familiar model, and enables sharing code between native platforms and the browser.\n\nYoga is written in C++, with a public C API. This allows Yoga to be used by a wide variety of languages, via both official and unofficial bindings.\n"
  },
  {
    "path": "website/docs/advanced/_category_.json",
    "content": "{\n  \"label\": \"Advanced\",\n  \"position\": 3\n}\n"
  },
  {
    "path": "website/docs/advanced/containing-block.md",
    "content": "---\nsidebar_position: 2\n---\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\nimport Playground from '@site/src/components/Playground';\n\n# Containing block\n\nOften times certain properties depend on a node beyond the\none it is applied to. An example of this is percentage lengths like `width: 50%` which\nwill set the width of a node to 50% of some other length. That other length is determined\nby the size of the _containing block_. A containing block is not a Yoga-specific\nconcept and exists in the [web](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block),\nbut since Yoga only implements a subset of web browser capabilities the behavior of\ncontaining blocks is much more streamlined and it is helpful to frame it differently.\n\n### Identifying the containing block of a node\n\n- If the [position type](/docs/styling/position) of a node is static or relative then the containing block\n  is always the _content box_ of the parent. This is because in Yoga every node is a\n  flex container and therefore establishes a formatting context which would form a\n  containing block on the web. The content box is formed by the node without margin, padding, or borders.\n- If the [position type](/docs/styling/position) of a node is absolute then the containing block will be\n  the _padding box_ (the content box plus padding) of any of:\n  - The nearest non-static ancestor.\n  - The nearest ancestor which is configured to always form a containing block. This\n    is helpful for supporting things outside of Yoga which would form a containing block\n    on the web, such as [filters](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)\n    or [transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform). This\n    is done by calling the corresponding API for the language you are working in.\n    <Tabs groupId=\"language\">\n    <TabItem value=\"cpp\" label=\"C/C++\">\n    ```cpp\n    YGNodeSetAlwaysFormsContainingBlock(node, true /*alwaysFormsContainingBlock*/);\n    ```\n    </TabItem>\n    <TabItem value=\"java\" label=\"Java\">\n    ```java\n    node.setAlwaysFormsContainingBlock(true /*alwaysFormsContainingBlock*/);\n    ```\n    </TabItem>\n    <TabItem value=\"js\" label=\"JavaScript\">\n    ```typescript\n    node.setAlwaysFormsContainingBlock(true /*alwaysFormsContainingBlock*/);\n    ```\n    </TabItem>\n    </Tabs>\n  - The root if none of the above apply. Note that this is different from the web\n    which has the notion of the _initial containing block_ that depends on the size\n    of the viewport.\n- If the node in question is the root then there is no containing block, but it will\n  use the `availableWidth` and `availableHeight` that is passed in to the call to\n  [`CalculateLayout`](/docs/getting-started/laying-out-a-tree).\n\n### What the containing block affects\n\n- Any percentage-based lengths will depend on the size of the containing block.\n  Specifically the [height](/docs/styling/width-height), top, and bottom properties will use the height of the\n  containing block. The [width](/docs/styling/width-height), left, right, [margin](/docs/styling/margin-padding-border),\n  and [padding](/docs/styling/margin-padding-border) will use the width of the containing block.\n- Any insets (left, right, top, bottom, etc.) applied to absolute nodes will be\n  relative to the corresponding edge of the containing block.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10\n    }}>\n    <Node\n      style={{\n        height: 100,\n        width: 100,\n        position: 'static'\n      }}>\n      <Node\n        style={{\n          height: 25,\n          width: '50%',\n          bottom: 10,\n          position: 'absolute'\n        }}\n      />\n    </Node>\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/advanced/external-layout-systems.mdx",
    "content": "---\nsidebar_position: 3\n---\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Integrating with external layout systems\n\nIt is typical for applications to have content whose size may be dependent on factors not expressible inside of Yoga. This can often include text, or views which are rendered or laid out using a different system. Yoga allows leaf nodes to delegate to a different layout system via **Measure Functions**.\n\n## Setting a measure function\n\nA measure function (callback) is set on a node, to instruct Yoga to ask an external layout system for sizing of a given structure when it is time to measure the leaf node.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\nMeasure functions in the C/C++ APIs are represented as C function pointers and do not carry state. A Yoga node may be associated with an external structure by setting a **context** on the node. This is a `void*` tag, which may be read during callbacks.\n\n\n```cpp\nWidget widget{};\n\nYGNodeSetContext(node, &w);\nYGNodeSetMeasureFunc(node, &measureWidget);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\nMeasure functions are represented by the `YogaMeasureFunction` interface. This interface can be fulfilled by an explicit subclass, an anonymous inner class, or a lambda. Framework data may be associated with the underlying measure function, or a global measure function may be used, with data set on the underlying Yoga node.\n\n\n```java\nWidget widget = new Widget();\n\nnode.setData(widget);\nnode.setMeasureFunction(MEASURE_WIDGET);\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\nMeasure functions are represented as an anonymous function, which may be bound to framework data.\n\n```ts\nconst widget = new Widget();\n\nnode.setMeasureFunction((width, widthMode, height, heightMode) => {\n ...\n});\n```\n\n</TabItem>\n</Tabs>\n\n## Responding with measurements\n\nYoga will call a node's measure function if the node does not otherwise have a definite dimension. This measure function is given the available space in each axis if constrained, with border and padding already subtracted.\n\n:::warning\n\nYoga is not guaranteed to call a node's measure function if the node already has a definite dimension. Final content dimensions for a node should be read from the node's layout results, instead of caching measure function results.\n\n:::\n\nEach axis is passed a `MeasureMode` as a constraint:\n1. `Exactly`: The measured length of the given axis is imposed to be the available length. This corresponds to [`stretch-fit`](https://www.w3.org/TR/css-sizing-3/#stretch-fit-size) sizing.\n2. `Undefined`: The measured length in the given axis should be the maximum natural length of the content. This corresponds to [`max-content`](https://www.w3.org/TR/css-sizing-3/#max-content) sizing.\n3. `AtMost`: The measured length in the given axis should be the minimum of the available space in the axis, and the natural content size. This corresponds to [`fit-content`](https://www.w3.org/TR/css-sizing-3/#fit-content-size) sizing.\n\n## Invalidating measurements\n\nYoga must be notified if the content associated with a node changes in a way which may effect measurement.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\nYGNodeMarkDirty(node);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n\n```java\nnode.dirty();\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nnode.markDirty();\n```\n\n</TabItem>\n</Tabs>\n"
  },
  {
    "path": "website/docs/advanced/incremental-layout.mdx",
    "content": "---\nsidebar_position: 1\n---\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Incremental layout\n\nMost real-world UIs are not static. Yoga trees may be laid out incrementally to avoid large work when only a small portion of the UI changes. Yoga will automatically mark a node and its ancestors as \"dirty\" if the node's style or children are changed. During the first layout, all nodes are considered dirty, and every node is visited. On subsequent layout, any nodes that are not dirty are skipped, so long as their parent constraints have not changed.\n\nYoga exposes whether the layout of a node or its children have changed via a `HasNewLayout` flag. This flag may be read when applying Yoga layout results to avoid traversing any subtrees where there are no updates.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\nvoid applyLayout(YGNodeRef node) {\n  if (!YGNodeHasNewLayout(node)) {\n    return;\n  }\n\n  // Reset the flag\n  YGNodeSetHasNewLayout(node, false);\n\n  // Do the real work\n  ...\n\n  for (size_t i = 0; i < YGNodeGetChildCount(node); i++) {\n    applyLayout(YGNodeGetChild(node, i));\n  }\n}\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nvoid applyLayout(YogaNode node) {\n  if (!node.hasNewLayout()) {\n    return;\n  }\n\n  // Reset the flag\n  node.markLayoutSeen();\n\n  // Do the real work\n  ...\n\n  for (int i = 0; i < node.getChildCount(); i++) {\n    applyLayout(node.getChildAt(i));\n  }\n}\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```javascript\nvoid applyLayout(node) {\n  if (!node.hasNewLayout()) {\n    return;\n  }\n\n  // Reset the flag\n  node.markLayoutSeen();\n\n  // Do the real work\n  ...\n\n  for (let i = 0; i < node.getChildCount(); i++) {\n    applyLayout(node.getChildAt(i));\n  }\n}\n```\n\n</TabItem>\n</Tabs>\n\nIn the below example, we start with an already laid out tree. The style of `F` is then modified, dirtying the node and its ancestors. After layout, the dirtied nodes, and any effected children, are marked as having new layout.\n\n| Clean tree | Dirtied tree | Has new layout |\n| - | - | - |\n| ![Clean tree](../img/invalidation-clean-tree.svg) | ![Clean tree](../img/invalidation-dirtied-tree.svg) | ![Has new layout](../img/invalidation-new-layout-tree.svg) |\n"
  },
  {
    "path": "website/docs/getting-started/_category_.json",
    "content": "{\n  \"label\": \"Getting Started\",\n  \"position\": 2\n}\n"
  },
  {
    "path": "website/docs/getting-started/configuring-yoga.mdx",
    "content": "---\nsidebar_position: 2\n---\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Configuring Yoga\n\nYoga may be configured to use different behavior, using a **Yoga Config**. A config is attached to a specific Yoga Node, allowing different parts of the Yoga tree to behave differently during layout.\n\nMost UI frameworks will apply a single uniform configuration. It is common in these cases to allocate a single Yoga Config which lasts the duration of the application. Other ownership structures are possible, which allow scenarios like laying out part of a tree with a different layout conformance than another part of the tree.\n\n| Global | Per-node | Contextual |\n| - | - | - |\n| ![Global](../img/config-uniform.svg) | ![Per-node](../img/config-per-node.svg) | ![Contextual](../img/config-contextual.svg) |\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\n#include <yoga/Yoga.h>\n\nYGConfigRef config = YGConfigNew();\n// Setup config...\n\nYGNodeRef root = YGNodeNewWithConfig(config);\n```\n\n:::warning\n\nYoga configs are not freed automatically, and should be freed via `YGConfigFree(config)` when no longer needed.\n\n:::\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nimport com.facebook.yoga.YogaConfigFactory;\nimport com.facebook.yoga.YogaNodeFactory;\n\nYogaConfig config = YogaConfigFactory.create();\n// Setup config...\n\nYogaNode root = YogaNodeFactory.create(config);\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nimport Yoga from 'yoga-layout';\n\nconst config = Yoga.Config.create();\n// Setup config...\n\nconst root = Yoga.Node.create(config);\n```\n\n:::warning\n\nYoga configs are not freed automatically, and should be freed via `config.free()` when no longer needed.\n\nA future revision of JavaScript bindings for Yoga may move to garbage collection to remove this requirement.\n\n:::\n\n</TabItem>\n</Tabs>\n\n## Layout Conformance and Yoga Errata\n\nYoga has historically had several behaviors which are not standards compliant, and can lead to styles being laid out differently compared to a web browser. Fixing issues with Yoga's behavior may change the layout of existing applications written against Yoga's previous behaviors. Yoga can be configured with a set of **Errata** which control whether Yoga prefers standard compliance, or backwards compatibility. By default, Yoga will prefer standards compliance.\n\nErrata may be configured granularity, as a set of bit flags, with several common presets available:\n1. `None` (default): Prefer standards compliance. Breaking layout fixes are enabled when updating Yoga.\n2. `Classic`: Operate as close as possible to Yoga 1.x.\n3. `All`: Enable the errata in `Classic`, alongside `StretchFlexBasis`, mapping to `UseLegacyStretchBehaviour` in Yoga 1.x, which was not enabled by default.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\n#include <yoga/Yoga.h>\n\nYGConfigRef config = YGConfigNew();\nYGConfigSetErrata(config, YGErrataClassic);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nimport com.facebook.yoga.YogaConfigFactory;\nimport com.facebook.yoga.YogaErrata;\n\nYogaConfig config = YogaConfigFactory.create();\nconfig.setErrata(YogaErrata.CLASSIC);\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nimport Yoga, {Errata} from 'yoga-layout';\n\nconst config = Yoga.Config.create();\nconfig.setErrata(Errata.Classic);\n```\n\n</TabItem>\n</Tabs>\n\n## Point Scale Factor\n\nYoga represents positions on a floating-point grid of \"points\". This would normally lead to edges of a layout box ending up on a subpixel boundary when displayed by the underlying UI framework. This can create issues such as inconsistent rendering, or blurriness. To mitigate this, Yoga will by default round positions such that box edges are aligned to a physical \"pixel grid\".\n\nNodes may be configured with a `PointScaleFactor` to inform Yoga of the mapping between points to physical pixels (usually the \"density\" of the display). Pixel grid rounding may be disabled by setting `PointScaleFactor` to `0`.\n\n| Before rounding | After rounding |\n| - | - |\n| ![Before rounding](../img/pixel-grid-before.png) | ![After rounding](../img/pixel-grid-after.png) |\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\n#include <yoga/Yoga.h>\n\nYGConfigRef config = YGConfigNew();\nYGConfigSetPointScaleFactor(config, 2.0f);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nimport com.facebook.yoga.YogaConfigFactory;\n\nYogaConfig config = YogaConfigFactory.create();\nconfig.setPointScaleFactor(2.0f);\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nimport Yoga from 'yoga-layout';\n\nconst config = Yoga.Config.create();\nconfig.setPointScaleFactor(2);\n```\n\n</TabItem>\n</Tabs>\n"
  },
  {
    "path": "website/docs/getting-started/laying-out-a-tree.mdx",
    "content": "---\nsidebar_position: 1\n---\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Laying out a Yoga tree\n\nEach box in Yoga is represented as a **Yoga Node**. These nodes form a tree which is used to store both input styles, and output layout results.\n\n## Building a Yoga tree\n\nYoga nodes may be created, styled, and linked together. See [Styling](../styling/) for a more comprehensive reference of how to style a Yoga Node.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\n#include <yoga/Yoga.h>\n\nYGNodeRef root = YGNodeNew();\nYGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);\nYGNodeStyleSetWidth(root, 100.0f);\nYGNodeStyleSetHeight(root, 100.0f);\n\nYGNodeRef child0 = YGNodeNew();\nYGNodeStyleSetFlexGrow(child0, 1.0f);\nYGNodeStyleSetMargin(child0, YGEdgeRight, 10.0f);\nYGNodeInsertChild(root, child0, 0.0f);\n\nYGNodeRef child1 = YGNodeNew();\nYGNodeStyleSetFlexGrow(child1, 1.0f);\nYGNodeInsertChild(root, child1, 1.0f);\n```\n\n:::warning\n\nYoga Nodes are not freed automatically and should be discarded when no longer needed. Individual nodes may be freed by calling `YGNodeFree(node)`, or an entire Yoga tree may be freed by calling `YGNodeFreeRecursive(node)`.\n\n:::\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nimport com.facebook.yoga.YogaEdge;\nimport com.facebook.yoga.YogaFlexDirection;\nimport com.facebook.yoga.YogaNode;\nimport com.facebook.yoga.YogaNodeFactory;\nimport com.facebook.yoga.YogaPositionType;\n\nYogaNode root = YogaNodeFactory.create();\nroot.setFlexDirection(YogaFlexDirection.ROW);\nroot.setWidth(100.0f);\nroot.setHeight(100.0f);\n\nYogaNode child0 = YogaNodeFactory.create();\nchild0.setFlexGrow(1.0f);\nchild0.setMargin(YogaEdge.Right, 10.0f);\nroot.addChildAt(child0, 0.0f);\n\nYogaNode child1 =  YogaNodeFactory.create();\nchild1.setFlexGrow(1.0f);\nroot.addChildAt(child1, 1.0f);\n```\n\n:::info\n\nJava backed Yoga Nodes are garbage collected, and do not need to manually be freed.\n\n:::\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nimport Yoga, {Edge, FlexDirection, PositionType} from 'yoga-layout';\n\nconst root = Yoga.Node.create();\nroot.setFlexDirection(FlexDirection.Row);\nroot.setWidth(100);\nroot.setHeight(100);\n\nconst child0 = Yoga.Node.create();\nchild0.setFlexGrow(1);\nchild0.setMargin(Edge.Right, 10);\nroot.insertChild(child0, 0);\n\nconst child1 = Yoga.Node.create();\nchild1.setFlexGrow(1);\nroot.insertChild(child1, 1);\n```\n\n:::warning\n\nYoga Nodes are not freed automatically and should be discarded when no longer needed. Individual nodes may be freed by calling `node.free()`, or an entire Yoga tree may be freed by calling `node.freeRecursive()`.\n\nA future revision of JavaScript bindings for Yoga may move to garbage collection to remove this requirement.\n\n:::\n\n</TabItem>\n</Tabs>\n\n## Laying out the tree\n\nThe full tree of Yoga nodes is laid out all at once. This layout may be constrained to a passed `availableWidth` and `availableHeight`, or may be allowed to expand infinitely in a given axis by passing Undefined.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\nYGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nroot.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);\n```\n\n:::info\n\nA tree of Java Yoga nodes may be laid out in RTL by setting the `direction` of the root node.\n\n:::\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nroot.calculateLayout(undefined, undefined, Direction.LTR);\n```\n\n</TabItem>\n</Tabs>\n\n## Reading layout results\n\nLayout results are now written to each Yoga node. This includes an offset relative to the border box of the node's parent, along with dimensions, and the resolved values for margin, border, and padding for each physical edge.\n\n<Tabs groupId=\"language\">\n\n<TabItem value=\"cpp\" label=\"C/C++\">\n\n```cpp\nfloat left = YGNodeLayoutGetLeft(child0);\nfloat height = YGNodeLayoutGetHeight(child0);\n```\n\n</TabItem>\n\n<TabItem value=\"java\" label=\"Java\">\n\n```java\nfloat left = child0.getLayoutX();\nfloat height = child0.getLayoutHeight();\n```\n\n</TabItem>\n\n<TabItem value=\"js\" label=\"JavaScript\">\n\n```ts\nconst left = child0.getComputedLeft();\nconst height = child0.getComputedHeight();\n```\n\n</TabItem>\n</Tabs>\n"
  },
  {
    "path": "website/docs/styling/_category_.json",
    "content": "{\n  \"label\": \"Styling\",\n  \"position\": 4\n}\n"
  },
  {
    "path": "website/docs/styling/align-content.mdx",
    "content": "---\nsidebar_position: 1\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Align Content\n\nAlign content defines the distribution of lines along the cross-axis. This only\nhas effect when items are wrapped to multiple lines using [flex wrap](/docs/styling/flex-wrap).\n\n**Flex start (default)**: Align wrapped lines to the start of the container's cross axis.\n\n**Flex end**: Align wrapped lines to the end of the container's cross axis.\n\n**Stretch**: Stretch wrapped lines to match the [height](/docs/styling/width-height) of the container's cross axis.\n\n**Center**: Align wrapped lines in the center of the container's cross axis.\n\n**Space between**: Evenly space wrapped lines across the container's cross axis, distributing\nremaining space between the lines.\n\n**Space around**: Evenly space wrapped lines across the container's cross axis, distributing\nremaining space around the lines. Compared to space between using\nspace around will result in space being distributed to the beginning of\nthe first lines and end of the last line.\n\n**Space evenly**: Evenly space wrapped lines across the container's cross axis, distributing\nremaining space around the lines. Compared to space around, space evenly will not\ndouble the gaps between children. The size of gaps between children and between\nthe parent's edges and the first/last child will all be equal.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 250,\n      padding: 10,\n      alignContent: 'flex-start',\n      flexWrap: 'wrap',\n    }}>\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/align-items-self.mdx",
    "content": "---\nsidebar_position: 2\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Align Items\n\nAlign items describes how to align children along the cross axis of their container.\nAlign items is very similar to [justify content](/docs/styling/justify-content) but instead of\napplying to the main axis, align items applies to the cross axis.\n\n**Stretch (default)**: Stretch children of a container to match the [height](/docs/styling/width-height) of the container's cross axis.\n\n**Flex start**: Align children of a container to the start of the container's cross axis.\n\n**Flex end**: Align children of a container to the end of the container's cross axis.\n\n**Center**: Align children of a container in the center of the container's cross axis.\n\n**Baseline**: Align children of a container along a common baseline. Individual children can be set to be the reference baseline for their parents.\n\n# Align Self\n\nAlign self has the same options and effect as align items but instead of\naffecting the children within a container, you can apply this property to\na single child to change its alignment within its parent. Align self\noverrides any option set by the parent with align items.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 250,\n      padding: 10,\n      alignItems: 'flex-start',\n    }}>\n    <Node\n      style={{\n        margin: 5,\n        height: 50,\n        width: 50,\n        alignSelf: 'center',\n      }}\n    />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/aspect-ratio.mdx",
    "content": "---\nsidebar_position: 3\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Aspect Ratio\n\nThe aspect ratio property in Yoga has the following properties:\n\n- Accepts any floating point value > 0, the default is undefined.\n- Defined as the ratio between the [width](/docs/styling/width-height) and the [height](/docs/styling/width-height) of a node e.g. if a node has an aspect ratio of 2 then its [width](/docs/styling/width-height) is twice the size of its [height](/docs/styling/width-height).\n- Respects the [min](/docs/styling/min-max-width-height) and [max](/docs/styling/min-max-width-height) dimensions of an item.\n- Has higher priority than [flex grow](/docs/styling/flex-basis-grow-shrink)\n- If aspect ratio, [width](/docs/styling/width-height), and [height](/docs/styling/width-height) are set then the cross axis dimension is overridden.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, height: 50, aspectRatio: 1.0}} />\n    <Node style={{margin: 5, height: 50, aspectRatio: 1.5}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/display.mdx",
    "content": "---\nsidebar_position: 4\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Display\n\nDisplay controls which layout specification to follow.\n\n**Flex (default)**: The CSS Flexible Box Model specification.\n\n**None**: The node is removed from the layout tree and will not be visible.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, height: 50, display: 'none'}} />\n    <Node style={{margin: 5, height: 50, display: 'flex'}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/flex-basis-grow-shrink.mdx",
    "content": "---\nsidebar_position: 5\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Flex Basis, Grow, and Shrink\n\n**Flex basis**: Is an axis-independent way of providing the default size of an item\nalong the main axis. Setting the flex basis of a child is similar to setting the [width](/docs/styling/width-height) of that\nchild if its parent is a container with a row [flex direction](/docs/styling/flex-direction) or setting the [height](/docs/styling/width-height) of a child\nif its parent is a container with a column [flex direction](/docs/styling/flex-direction). The flex basis of an item is the\ndefault size of that item, the size of the item before any flex grow and flex shrink\ncalculations are performed.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, flexBasis: 50}} />\n  </Node>\n</Layout>`} />\n\n**Flex grow**: Describes how any space within a container should be distributed\namong its children along the main axis. After laying out its children, a container will\ndistribute any remaining space according to the flex grow values specified by its children.\n\nFlex grow accepts any floating point value >= 0, with 0 being the default value.\nA container will distribute any remaining space among its children weighted by the child’s flex grow value.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, flexGrow: 0.25}} />\n    <Node style={{margin: 5, flexGrow: 0.75}} />\n  </Node>\n</Layout>`} />\n\n**Flex shrink**: Describes how to shrink children along the main axis in the\ncase that the total size of the children overflow the size of the container on the main axis.\nflex shrink is very similar to flex grow and can be thought of in the same way if\nany overflowing size is considered to be negative remaining space.\nThese two properties also work well together by allowing children to grow and shrink as needed.\n\nFlex shrink accepts any floating point value >= 0, with 1 being the default value.\nA container will shrink its children weighted by the child’s flex shrink value.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, flexShrink: 5, height: 150}} />\n    <Node style={{margin: 5, flexShrink: 10, height: 150}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/flex-direction.mdx",
    "content": "---\nsidebar_position: 6\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Flex Direction\n\nFlex direction controls the direction in which children of a node are laid out.\nThis is also referred to as the main axis. The main axis is the direction in\nwhich children are laid out. The cross axis is the axis perpendicular to the\nmain axis, or the axis which wrapping lines are laid out in.\n\n**Column (default)**: Align children from top to bottom. If [wrapping](/docs/styling/flex-wrap) is enabled then\nthe next line will start to the left first item on the top of the container.\n\n**Row**: Align children from left to right. If [wrapping](/docs/styling/flex-wrap) is enabled then\nthe next line will start under the first item on the left of the container.\n\n**Row reverse**: Align children from right to left. If [wrapping](/docs/styling/flex-wrap) is enabled then\nthe next line will start under the first item on the right of the container.\n\n**Column reverse**: Align children from bottom to top. If [wrapping](/docs/styling/flex-wrap) is enabled then\nthe next line will start to the left first item on the bottom of the container.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n      flexDirection: 'column',\n    }}>\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/flex-wrap.mdx",
    "content": "---\nsidebar_position: 7\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Flex Wrap\n\nThe flex wrap property is set on containers and controls what happens when\nchildren overflow the size of the container along the main axis. By default\nchildren are forced into a single line (which can shrink nodes). When wrapping lines [align content](/docs/styling/align-content) can be used to specify how the\nlines are placed in the container.\n\n**No wrap (default)**: No wrapping and children might shrink as a result.\n\n**Wrap**: Nodes are wrapped into multiple lines along the main axis if needed.\n\n**Wrap reverse**: Behaves the same as wrap but the order of the lines is reversed.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 250,\n      padding: 10,\n      flexWrap: 'wrap',\n    }}>\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/gap.mdx",
    "content": "---\nsidebar_position: 8\n---\nimport Playground from '@site/src/components/Playground';\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Gap\n\nGap will add spacing between the rows and columns of a flex container. You can\nspecify if you want the gaps to be between only the rows, only the columns, or\nboth. You can do this by passing in the corresponding gutter value to the API,\nfor example\n\n<Tabs groupId=\"language\">\n<TabItem value=\"cpp\" label=\"C/C++\">\n```cpp\nYGNodeStyleSetGap(node, YGGutterRow, amount);\n```\n</TabItem>\n<TabItem value=\"java\" label=\"Java\">\n```java\nnode.setGap(YogaGutter.ROW, amount);\n```\n</TabItem>\n<TabItem value=\"js\" label=\"JavaScript\">\n```typescript\nnode.setGap(Gutter.Row, amount);\n```\n</TabItem>\n</Tabs>\n\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 250,\n      padding: 10,\n      flexWrap: 'wrap',\n      gap: 10,\n    }}>\n    <Node style={{height: 50, width: 50}} />\n    <Node style={{height: 50, width: 50}} />\n    <Node style={{height: 50, width: 50}} />\n    <Node style={{height: 50, width: 50}} />\n    <Node style={{height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/index.md",
    "content": "---\nsidebar_position: 2\n---\n\n# Styling\n\nEach Yoga node has an associated style. Nodes may be styled using similar properties to CSS, with some caveats.\n\n## Default styles\n\nThe default Yoga node style is similar to a box on web set to `display: flex`, with a few notable exceptions:\n\n1. `flex-direction` defaults to `column` instead of `row`\n2. `align-content` defaults to `flex-start` instead of `stretch`\n3. `flex-shrink` defaults to `0` instead of `1`\n4. `position` defaults to `relative` instead of `static`\n\nYoga may be [configured](../getting-started/configuring-yoga.mdx) to align to the defaults on web for `flex-direction`, `align-content`, and `flex-shrink` by setting the `UseWebDefaults` flag.\n\n:::warning\n\nBecause `UseWebDefaults` was established before the introduction of `position: 'static'`, it does not change the default `position`, in order to preserve compatibility.\n\n:::\n\n## Box Sizing\n\nYoga acts as if [`box-sizing: 'border-box'`](https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing) is set. This means that specified dimensions for a box will include the space taken for padding and border.\n\n## Edges\n\nMargin, padding, position, and border, are set against an Edge, which may be:\n1. Relative to writing direction (start/end)\n2. A physical edge (top/right/left/bottom)\n3. A collection of edges (vertical/horizontal/all)\n\nA style value may be set against multiple Edge values at once, with precedence given in the above order.\n\n## Units\n\nYoga does not operate on CSS units like `px` or `em`. Yoga instead works on \"points\", representing an arbitrary, canonical absolute unit (usually mapped to display independent pixels), along with percentage. Other units should be absolutized before being given to Yoga.\n\n## Non-standard properties\n\nYoga's `aspect-ratio` property was added before the same property was added to CSS, and may act subtlety different. These differences may be reconciled in a future version of Yoga.\n\nYoga's `flex` shorthand will act as `flex-grow` if positive, or `flex-shrink` if negative.\n"
  },
  {
    "path": "website/docs/styling/insets.mdx",
    "content": "---\nsidebar_position: 8.5\n---\n\nimport Playground from '@site/src/components/Playground';\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Insets\n\nInsets refer to the position property that you can assign to an edge\n(not to be confused with [position type](/docs/styling/position)) using one of the following\nAPIs:\n<Tabs groupId=\"language\">\n<TabItem value=\"cpp\" label=\"C/C++\">\n```cpp\nYGNodeStyleSetPosition(node, edge, position);\n```\n</TabItem>\n<TabItem value=\"java\" label=\"Java\">\n```java\nnode.setPosition(edge, position);\n```\n</TabItem>\n<TabItem value=\"js\" label=\"JavaScript\">\n```typescript\nnode.setPosition(edge, position);\n```\n</TabItem>\n</Tabs>\nThis property will offset the node in a specific way depending on\nwhat [position type](/docs/styling/position) the node has.\n\n* If the node is static then insets have no effect.\n* If the node is relative then insets will move the node the designated amount\nfrom where the node would normally be in the container. Each inset property\nis relative to the node's corresponding physical edge. So `YGNodeStyleSetPosition(node, YGEdgeRight, 10.0f)` will offset the node\nso that the right edge is 10 units away from where the right edge would be originally.\n* If the node is absolute then insets will move the node the designated amount away from\nthe node's [containing block](/docs/advanced/containing-block). So `YGNodeStyleSetPosition(node, YGEdgeRight, 10.0f)`\nwill offset the node so that the right edge is 10 units away from the [containing block's](/docs/advanced/containing-block)\nright edge.\n\nIn the event that a node has a fixed size and opposite insets are defined\n(e.g. a value assigned to the right edge and left edge) then the left and top edge will have priority.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n    }}>\n    <Node\n      style={{\n        height: 50,\n        width: 50,\n        top: 50,\n        left: 50,\n      }}\n    />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/justify-content.mdx",
    "content": "---\nsidebar_position: 9\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Justify Content\n\nJustify content describes how to align children within the main axis of their container.\nFor example, you can use this property to center a child horizontally within a container\nwith [flex direction](/docs/styling/flex-direction) set to row or vertically within a container with [flex direction](/docs/styling/flex-direction)\nset to column.\n\n**Flex start (default)**: Align children of a container to the start of the container's main axis.\n\n**Flex end**: Align children of a container to the end of the container's main axis.\n\n**Center**: Align children of a container in the center of the container's main axis.\n\n**Space between**: Evenly space of children across the container's main axis, distributing\nremaining space between the children.\n\n**Space around**: Evenly space of children across the container's main axis, distributing\nremaining space around the children. Compared to space between using\nspace around will result in space being distributed to the beginning of\nthe first child and end of the last child.\n\n**Space evenly**: Evenly distributed within the alignment container along the main axis.\nThe spacing between each pair of adjacent items, the main-start edge and the first item,\nand the main-end edge and the last item, are all exactly the same.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n      justifyContent: 'flex-start',\n    }}>\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/layout-direction.mdx",
    "content": "---\nsidebar_position: 10\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Layout Direction\n\nLayout direction specifies the direction in which children and text\nin a hierarchy should be laid out. Layout direction also effects what\nedge `start` and `end` refer to. By default Yoga lays out with left-to-right (LTR)\nlayout direction. In this mode `start` refers to `left` and `end`\nrefers to `right`. When localizing your apps for markets with right-to-left (RTL) languages\nyou should customize this by either by passing a direction\nto the [CalculateLayout](/docs/getting-started/laying-out-a-tree) call or by setting the direction on the root node.\n\n**LTR (default)**: Text and children and laid out from left to right. Styles applied\nthe start of an element are applied on the left side.\n\n**RTL**: Text and children and laid out from right to left. Styles applied the\nstart of an element are applied on the right side.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n      direction: 'ltr',\n    }}>\n    <Node style={{margin: 5, height: 50, width: 50}} />\n    <Node style={{margin: 5, height: 50, width: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/margin-padding-border.mdx",
    "content": "---\nsidebar_position: 11\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Margin, Padding, and Border\n\n**Margin**: Affects the spacing around the outside of a node. A node with margin\nwill offset itself from the bounds of its parent but also offset the\nlocation of any siblings. The margin of a node contributes to the total size\nof its parent if the parent is auto sized.\n\n**Padding**: Affects the size of the node it is applied to. Padding in Yoga acts as if\n`box-sizing: border-box;` was set. That is padding will not add to the total size\nof an element if it has an explicit size set. For auto sized nodes padding will increase\nthe size of the node as well as offset the location of any children.\n\n**Border**: in Yoga acts exactly like padding and only exists as a separate property so\nthat higher level frameworks get a hint as to how thick to draw a border. Yoga however\ndoes not do any drawing so just uses this information during layout where border\nacts exactly like padding.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node\n      style={{\n        margin: 5,\n        padding: 20,\n        borderWidth: 20,\n        height: 50,\n      }}\n    />\n    <Node style={{height: 50}} />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/min-max-width-height.mdx",
    "content": "---\nsidebar_position: 12\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Min/Max Width and Height\n\nThese properties set the maximum and minimum size constraints of a node.\nThey have higher priority than all other properties and will always be respected.\nConstraints can be specified as either absolute pixel values or as percentages of their\n[containing block's](/docs/advanced/containing-block) size. By default all these constraints are `undefined`.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 250,\n      padding: 10,\n    }}>\n    <Node style={{margin: 5, height: 25}} />\n    <Node\n      style={{\n        margin: 5,\n        height: 100,\n        maxHeight: 25,\n      }}\n    />\n    <Node\n      style={{\n        margin: 5,\n        height: 25,\n        minHeight: 50,\n      }}\n    />\n    <Node\n      style={{\n        margin: 5,\n        height: 25,\n        maxWidth: 25,\n      }}\n    />\n    <Node\n      style={{\n        margin: 5,\n        height: 25,\n        width: 25,\n        minWidth: 50,\n      }}\n    />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/position.mdx",
    "content": "---\nsidebar_position: 11\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Position\n\n**Relative (default)**: This node is laid out according to the specified flow of the flex container it is apart of.\nThat is, it particpates in the flexbox algorithm and will take up space within the container, unlike absolute.\n[Insets](/docs/styling/insets) will offset the node from its normal position within its container.\nThis node will always form a [containing block](/docs/advanced/containing-block).\n\n**Absolute**: This node is removed from the specified flow of the flex container it is apart of.\nAbsolute nodes do not take up space in its flex container and will not affect the position of\nits siblings. [Insets](/docs/styling/insets) will offset the node from its [containing block](/docs/advanced/containing-block).\n\n**Static**: This node behaves like relative except it will ignore [insets](/docs/styling/insets) and will not\nform a [containing block](/docs/advanced/containing-block).\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node\n      style={{\n        margin: 5,\n        height: 50,\n        top: 20,\n        position: 'relative',\n      }}\n    />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docs/styling/width-height.mdx",
    "content": "---\nsidebar_position: 14\n---\n\nimport Playground from '@site/src/components/Playground';\n\n# Width and Height\n\nThe width property specifies the width of the node's border box (the collective size of the node's content, padding, and border).\nSimilarly height property specifies the height of the node's border box.\n\nBoth width and height can take following values:\n\n**Auto**: The default Value, Yoga calculates the width/height for the node based\non its content, whether that is other children, text, or an image.\n\n**Pixels**: Defines the width/height in absolute pixels. Depending on other properties set on\nthe Yoga node this may or may not be the final dimension of the node.\n\n**Percentage**: Defines the width or height in percentage of its [containing block's](/docs/advanced/containing-block) width or height respectively.\n\n<Playground code={`<Layout config={{useWebDefaults: false}}>\n  <Node\n    style={{\n      width: 200,\n      height: 200,\n      padding: 10,\n    }}>\n    <Node\n      style={{\n        margin: 5,\n        height: 50,\n        width: 50,\n      }}\n    />\n  </Node>\n</Layout>`} />\n"
  },
  {
    "path": "website/docusaurus.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @ts-check\n\nimport {themes as prismThemes} from 'prism-react-renderer';\n\n/** @type {import('@docusaurus/types').Config} */\nexport default {\n  title: 'Yoga',\n  tagline:\n    'Build flexible layouts on any platform with a highly optimized open source layout engine designed with speed, size, and ease of use in mind.',\n  favicon: 'img/favicon.svg',\n\n  url: 'https:/yogalayout.dev',\n  baseUrl: '/',\n\n  organizationName: 'facebook',\n  projectName: 'yoga',\n\n  onBrokenLinks: 'throw',\n  onBrokenMarkdownLinks: 'warn',\n\n  i18n: {\n    defaultLocale: 'en',\n    locales: ['en'],\n  },\n\n  presets: [\n    [\n      'classic',\n      /** @type {import('@docusaurus/preset-classic').Options} */\n      ({\n        docs: {\n          sidebarPath: require.resolve('./sidebars.cjs'),\n          editUrl: 'https://github.com/facebook/yoga/tree/main/website',\n        },\n        blog: {\n          showReadingTime: true,\n          editUrl: 'https://github.com/facebook/yoga/tree/main/website',\n        },\n        theme: {\n          customCss: require.resolve('./src/css/custom.css'),\n        },\n      }),\n    ],\n  ],\n\n  themeConfig:\n    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */\n    ({\n      navbar: {\n        title: 'Yoga',\n        logo: {\n          alt: 'Yoga Logo',\n          src: 'img/logo.svg',\n        },\n        items: [\n          {\n            type: 'docSidebar',\n            sidebarId: 'docsSidebar',\n            position: 'left',\n            label: 'Documentation',\n          },\n          {to: '/playground', label: 'Playground', position: 'left'},\n          {to: '/blog', label: 'Blog', position: 'left'},\n          {\n            href: 'https://github.com/facebook/yoga',\n            label: 'GitHub',\n            position: 'right',\n          },\n        ],\n      },\n      footer: {\n        style: 'dark',\n        logo: {\n          alt: 'Meta Open Source',\n          src: 'img/meta_oss.svg',\n          href: 'https://opensource.fb.com',\n          width: 300,\n          height: 64,\n        },\n        copyright: `Copyright © ${new Date().getFullYear()} Meta Platforms, Inc.`,\n      },\n      prism: {\n        theme: prismThemes.github,\n        darkTheme: prismThemes.oneDark,\n        additionalLanguages: ['gradle', 'java', 'json', 'json5', 'ruby'],\n      },\n      colorMode: {\n        defaultMode: 'dark',\n        respectPrefersColorScheme: true,\n      },\n      metadata: [\n        {\n          property: 'og:image',\n          content: 'https://yogalayout.dev/img/opengraph.png',\n        },\n        {\n          property: 'og:image:width',\n          content: '1200',\n        },\n        {\n          property: 'og:image:height',\n          content: '630',\n        },\n      ],\n    }),\n};\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"website\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"docusaurus\": \"docusaurus\",\n    \"start\": \"yarn workspace yoga-layout build && docusaurus start\",\n    \"build\": \"yarn workspace yoga-layout build && docusaurus build\",\n    \"swizzle\": \"docusaurus swizzle\",\n    \"deploy\": \"docusaurus deploy\",\n    \"clear\": \"docusaurus clear\",\n    \"serve\": \"docusaurus serve\",\n    \"write-translations\": \"docusaurus write-translations\",\n    \"write-heading-ids\": \"docusaurus write-heading-ids\",\n    \"typecheck\": \"tsc\",\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\"\n  },\n  \"dependencies\": {\n    \"@docusaurus/core\": \"3.6.0\",\n    \"@docusaurus/preset-classic\": \"3.6.0\",\n    \"@mdx-js/react\": \"^3.0.0\",\n    \"clsx\": \"^2.0.0\",\n    \"lz-string\": \"^1.5.0\",\n    \"nullthrows\": \"^1.1.1\",\n    \"prism-react-renderer\": \"^2.3.0\",\n    \"react\": \"^18.3.0\",\n    \"react-dom\": \"^18.3.0\",\n    \"react-live\": \"^4.1.5\",\n    \"yoga-layout\": \"0.0.0\"\n  },\n  \"devDependencies\": {\n    \"@docusaurus/module-type-aliases\": \"3.6.0\",\n    \"@docusaurus/tsconfig\": \"3.6.0\",\n    \"@docusaurus/types\": \"3.6.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\"\n  },\n  \"browserslist\": \"> 0.5%, last 2 versions, Firefox ESR, not dead\",\n  \"engines\": {\n    \"node\": \">=18.0\"\n  }\n}\n"
  },
  {
    "path": "website/sidebars.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Creating a sidebar enables you to:\n - create an ordered group of docs\n - render a sidebar for each doc of that group\n - provide next/previous navigation\n\n The sidebars can be generated from the filesystem, or explicitly defined here.\n\n Create as many sidebars as you want.\n */\n\n// @ts-check\n\n/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\nconst sidebars = {\n  // By default, Docusaurus generates a sidebar from the docs folder structure\n  docsSidebar: [{type: 'autogenerated', dirName: '.'}],\n};\n\nmodule.exports = sidebars;\n"
  },
  {
    "path": "website/src/components/EditorToolbar.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n.toolbar {\n  display: flex;\n  column-gap: 8px;\n}\n\n.toolbar button {\n  display: flex;\n  align-items: center;\n  background: var(--prism-background-color);\n  color: var(--prism-color);\n  border: 1px solid var(--ifm-color-emphasis-300);\n  border-radius: var(--ifm-global-radius);\n  padding: 0.4rem;\n  line-height: 0;\n  transition: opacity var(--ifm-transition-fast) ease-in-out;\n  opacity: 0.4;\n}\n\n.toolbar button:focus-visible,\n.toolbar button:hover {\n  opacity: 1 !important;\n}\n\n.icon {\n  width: 24px;\n  height: 24px;\n}\n\n.iconSwitcher {\n  position: relative;\n  width: 24px;\n  height: 24px;\n}\n\n.actionIcon,\n.successIcon {\n  position: absolute;\n  top: 0;\n  left: 0;\n  fill: currentColor;\n  opacity: inherit;\n  width: inherit;\n  height: inherit;\n  transition: all var(--ifm-transition-fast) ease;\n}\n\n.successIcon {\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%) scale(0.33);\n  opacity: 0;\n  color: #00d600;\n}\n\n.clicked .actionIcon {\n  transform: scale(0.33);\n  opacity: 0;\n}\n\n.clicked .successIcon {\n  transform: translate(-50%, -50%) scale(1);\n  opacity: 1;\n  transition-delay: 0.075s;\n}\n\n@media (max-width: 996px) {\n  .toolbar {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "website/src/components/EditorToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport clsx from 'clsx';\nimport lzString from 'lz-string';\n\nimport LinkIcon from '../../static/img/link.svg';\nimport SuccessIcon from '@theme/Icon/Success';\n\nimport styles from './EditorToolbar.module.css';\n\nexport type Props = Readonly<{\n  code: string;\n  className?: string;\n  style?: React.CSSProperties;\n}>;\n\nexport default function EditorToolbar({code, className, style}: Props) {\n  const handleShare = useCallback(() => {\n    navigator.clipboard.writeText(\n      window.location.origin +\n        `/playground?code=${lzString.compressToEncodedURIComponent(code)}`,\n    );\n  }, [code]);\n\n  return (\n    <div className={clsx(styles.toolbar, className)} style={style}>\n      <ToolbarButton Icon={LinkIcon} label=\"Share\" onClick={handleShare} />\n    </div>\n  );\n}\n\ntype ToolbarButtonProps = Readonly<{\n  onClick: () => void;\n  Icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n  label?: string;\n}>;\n\nfunction ToolbarButton({onClick, Icon, label}: ToolbarButtonProps) {\n  const [isSuccess, setIsSuccess] = useState(false);\n  const copyTimeout = useRef<number | undefined>(undefined);\n\n  useEffect(() => () => window.clearTimeout(copyTimeout.current), []);\n\n  const handleClick = useCallback(() => {\n    onClick();\n    setIsSuccess(true);\n    copyTimeout.current = window.setTimeout(() => {\n      setIsSuccess(false);\n    }, 1000);\n  }, [onClick]);\n\n  return (\n    <button\n      type=\"button\"\n      className={clsx('clean-btn', isSuccess && styles.clicked)}\n      onClick={handleClick}\n      aria-label={label}>\n      <span className={styles.iconSwitcher} aria-hidden=\"true\">\n        <Icon className={styles.actionIcon} />\n        <SuccessIcon className={styles.successIcon} />\n      </span>\n    </button>\n  );\n}\n"
  },
  {
    "path": "website/src/components/FlexStyle.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {\n  Align,\n  BoxSizing,\n  Direction,\n  Display,\n  Edge,\n  FlexDirection,\n  Gutter,\n  Justify,\n  Overflow,\n  PositionType,\n  Wrap,\n  Node as YogaNode,\n} from 'yoga-layout';\n\nexport type AlignContent =\n  | 'flex-start'\n  | 'flex-end'\n  | 'center'\n  | 'stretch'\n  | 'space-between'\n  | 'space-around'\n  | 'space-evenly';\n\nexport type AlignItems =\n  | 'flex-start'\n  | 'flex-end'\n  | 'center'\n  | 'stretch'\n  | 'baseline';\n\nexport type JustifyContent =\n  | 'flex-start'\n  | 'flex-end'\n  | 'center'\n  | 'space-between'\n  | 'space-around'\n  | 'space-evenly';\n\nexport type FlexStyle = {\n  alignContent?: AlignContent;\n  alignItems?: AlignItems;\n  alignSelf?: AlignItems;\n  aspectRatio?: number;\n  borderBottomWidth?: number;\n  borderEndWidth?: number;\n  borderLeftWidth?: number;\n  borderRightWidth?: number;\n  borderStartWidth?: number;\n  borderTopWidth?: number;\n  borderWidth?: number;\n  borderInlineWidth?: number;\n  borderBlockWidth?: number;\n  bottom?: number | `${number}%`;\n  boxSizing?: 'border-box' | 'content-box';\n  direction?: 'ltr' | 'rtl';\n  display?: 'none' | 'flex' | 'contents';\n  end?: number | `${number}%`;\n  flex?: number;\n  flexBasis?: number | 'auto' | `${number}%`;\n  flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n  rowGap?: number;\n  gap?: number;\n  columnGap?: number;\n  flexGrow?: number;\n  flexShrink?: number;\n  flexWrap?: 'wrap' | 'nowrap' | 'wrap-reverse';\n  height?: number | 'auto' | `${number}%`;\n  justifyContent?: JustifyContent;\n  left?: number | `${number}%`;\n  margin?: number | 'auto' | `${number}%`;\n  marginBottom?: number | 'auto' | `${number}%`;\n  marginEnd?: number | 'auto' | `${number}%`;\n  marginLeft?: number | 'auto' | `${number}%`;\n  marginRight?: number | 'auto' | `${number}%`;\n  marginStart?: number | 'auto' | `${number}%`;\n  marginTop?: number | 'auto' | `${number}%`;\n  marginInline?: number | 'auto' | `${number}%`;\n  marginBlock?: number | 'auto' | `${number}%`;\n  maxHeight?: number | `${number}%`;\n  maxWidth?: number | `${number}%`;\n  minHeight?: number | `${number}%`;\n  minWidth?: number | `${number}%`;\n  overflow?: 'visible' | 'hidden' | 'scroll';\n  padding?: number | `${number}%`;\n  paddingBottom?: number | `${number}%`;\n  paddingEnd?: number | `${number}%`;\n  paddingLeft?: number | `${number}%`;\n  paddingRight?: number | `${number}%`;\n  paddingStart?: number | `${number}%`;\n  paddingTop?: number | `${number}%`;\n  paddingInline?: number | `${number}%`;\n  paddingBlock?: number | `${number}%`;\n  position?: 'absolute' | 'relative' | 'static';\n  right?: number | `${number}%`;\n  start?: number | `${number}%`;\n  top?: number | `${number}%`;\n  insetInline?: number | `${number}%`;\n  insetBlock?: number | `${number}%`;\n  inset?: number | `${number}%`;\n  width?: number | 'auto' | `${number}%`;\n};\n\nexport function applyStyle(node: YogaNode, style: FlexStyle = {}): void {\n  for (const key of Object.keys(style)) {\n    try {\n      switch (key) {\n        case 'alignContent':\n          node.setAlignContent(alignContent(style.alignContent));\n          break;\n        case 'alignItems':\n          node.setAlignItems(alignItems(style.alignItems));\n          break;\n        case 'alignSelf':\n          node.setAlignSelf(alignItems(style.alignSelf));\n          break;\n        case 'aspectRatio':\n          node.setAspectRatio(style.aspectRatio);\n          break;\n        case 'borderBottomWidth':\n          node.setBorder(Edge.Bottom, style.borderBottomWidth);\n          break;\n        case 'borderEndWidth':\n          node.setBorder(Edge.End, style.borderEndWidth);\n          break;\n        case 'borderLeftWidth':\n          node.setBorder(Edge.Left, style.borderLeftWidth);\n          break;\n        case 'borderRightWidth':\n          node.setBorder(Edge.Right, style.borderRightWidth);\n          break;\n        case 'borderStartWidth':\n          node.setBorder(Edge.Start, style.borderStartWidth);\n          break;\n        case 'borderTopWidth':\n          node.setBorder(Edge.Top, style.borderTopWidth);\n          break;\n        case 'borderWidth':\n          node.setBorder(Edge.All, style.borderWidth);\n          break;\n        case 'borderInlineWidth':\n          node.setBorder(Edge.Horizontal, style.borderInlineWidth);\n          break;\n        case 'borderBlockWidth':\n          node.setBorder(Edge.Vertical, style.borderBlockWidth);\n          break;\n        case 'bottom':\n          node.setPosition(Edge.Bottom, style.bottom);\n          break;\n        case 'boxSizing':\n          node.setBoxSizing(boxSizing(style.boxSizing));\n          break;\n        case 'direction':\n          node.setDirection(direction(style.direction));\n          break;\n        case 'display':\n          node.setDisplay(display(style.display));\n          break;\n        case 'end':\n          node.setPosition(Edge.End, style.end);\n          break;\n        case 'flex':\n          node.setFlex(style.flex);\n          break;\n        case 'flexBasis':\n          node.setFlexBasis(style.flexBasis);\n          break;\n        case 'flexDirection':\n          node.setFlexDirection(flexDirection(style.flexDirection));\n          break;\n        case 'rowGap':\n          node.setGap(Gutter.Row, style.rowGap);\n          break;\n        case 'gap':\n          node.setGap(Gutter.All, style.gap);\n          break;\n        case 'columnGap':\n          node.setGap(Gutter.Column, style.columnGap);\n          break;\n        case 'flexGrow':\n          node.setFlexGrow(style.flexGrow);\n          break;\n        case 'flexShrink':\n          node.setFlexShrink(style.flexShrink);\n          break;\n        case 'flexWrap':\n          node.setFlexWrap(flexWrap(style.flexWrap));\n          break;\n        case 'height':\n          node.setHeight(style.height);\n          break;\n        case 'justifyContent':\n          node.setJustifyContent(justifyContent(style.justifyContent));\n          break;\n        case 'left':\n          node.setPosition(Edge.Left, style.left);\n          break;\n        case 'margin':\n          node.setMargin(Edge.All, style.margin);\n          break;\n        case 'marginBottom':\n          node.setMargin(Edge.Bottom, style.marginBottom);\n          break;\n        case 'marginEnd':\n          node.setMargin(Edge.End, style.marginEnd);\n          break;\n        case 'marginLeft':\n          node.setMargin(Edge.Left, style.marginLeft);\n          break;\n        case 'marginRight':\n          node.setMargin(Edge.Right, style.marginRight);\n          break;\n        case 'marginStart':\n          node.setMargin(Edge.Start, style.marginStart);\n          break;\n        case 'marginTop':\n          node.setMargin(Edge.Top, style.marginTop);\n          break;\n        case 'marginInline':\n          node.setMargin(Edge.Horizontal, style.marginInline);\n          break;\n        case 'marginBlock':\n          node.setMargin(Edge.Vertical, style.marginBlock);\n          break;\n        case 'maxHeight':\n          node.setMaxHeight(style.maxHeight);\n          break;\n        case 'maxWidth':\n          node.setMaxWidth(style.maxWidth);\n          break;\n        case 'minHeight':\n          node.setMinHeight(style.minHeight);\n          break;\n        case 'minWidth':\n          node.setMinWidth(style.minWidth);\n          break;\n        case 'overflow':\n          node.setOverflow(overflow(style.overflow));\n          break;\n        case 'padding':\n          node.setPadding(Edge.All, style.padding);\n          break;\n        case 'paddingBottom':\n          node.setPadding(Edge.Bottom, style.paddingBottom);\n          break;\n        case 'paddingEnd':\n          node.setPadding(Edge.End, style.paddingEnd);\n          break;\n        case 'paddingLeft':\n          node.setPadding(Edge.Left, style.paddingLeft);\n          break;\n        case 'paddingRight':\n          node.setPadding(Edge.Right, style.paddingRight);\n          break;\n        case 'paddingStart':\n          node.setPadding(Edge.Start, style.paddingStart);\n          break;\n        case 'paddingTop':\n          node.setPadding(Edge.Top, style.paddingTop);\n          break;\n        case 'paddingInline':\n          node.setPadding(Edge.Horizontal, style.paddingInline);\n          break;\n        case 'paddingBlock':\n          node.setPadding(Edge.Vertical, style.paddingBlock);\n          break;\n        case 'position':\n          node.setPositionType(position(style.position));\n          break;\n        case 'right':\n          node.setPosition(Edge.Right, style.right);\n          break;\n        case 'start':\n          node.setPosition(Edge.Start, style.start);\n          break;\n        case 'top':\n          node.setPosition(Edge.Top, style.top);\n          break;\n        case 'insetInline':\n          node.setPosition(Edge.Horizontal, style.insetInline);\n          break;\n        case 'insetBlock':\n          node.setPosition(Edge.Vertical, style.insetBlock);\n          break;\n        case 'inset':\n          node.setPosition(Edge.All, style.inset);\n          break;\n        case 'width':\n          node.setWidth(style.width);\n          break;\n      }\n    } catch (e) {\n      // Fail gracefully\n    }\n  }\n}\n\nfunction alignContent(str?: AlignContent): Align {\n  switch (str) {\n    case 'flex-start':\n      return Align.FlexStart;\n    case 'flex-end':\n      return Align.FlexEnd;\n    case 'center':\n      return Align.Center;\n    case 'stretch':\n      return Align.Stretch;\n    case 'space-between':\n      return Align.SpaceBetween;\n    case 'space-around':\n      return Align.SpaceAround;\n    case 'space-evenly':\n      return Align.SpaceEvenly;\n  }\n  throw new Error(`\"${str}\" is not a valid value for alignContent`);\n}\n\nfunction alignItems(str?: AlignItems): Align {\n  switch (str) {\n    case 'flex-start':\n      return Align.FlexStart;\n    case 'flex-end':\n      return Align.FlexEnd;\n    case 'center':\n      return Align.Center;\n    case 'stretch':\n      return Align.Stretch;\n    case 'baseline':\n      return Align.Baseline;\n  }\n  throw new Error(`\"${str}\" is not a valid value for alignItems`);\n}\n\nfunction boxSizing(str?: 'border-box' | 'content-box'): BoxSizing {\n  switch (str) {\n    case 'border-box':\n      return BoxSizing.BorderBox;\n    case 'content-box':\n      return BoxSizing.ContentBox;\n  }\n  throw new Error(`\"${str}\" is not a valid value for boxSizing`);\n}\n\nfunction direction(str?: 'ltr' | 'rtl'): Direction {\n  switch (str) {\n    case 'ltr':\n      return Direction.LTR;\n    case 'rtl':\n      return Direction.RTL;\n  }\n  throw new Error(`\"${str}\" is not a valid value for direction`);\n}\n\nfunction display(str?: 'none' | 'flex' | 'contents'): Display {\n  switch (str) {\n    case 'none':\n      return Display.None;\n    case 'flex':\n      return Display.Flex;\n    case 'contents':\n      return Display.Contents;\n  }\n  throw new Error(`\"${str}\" is not a valid value for display`);\n}\n\nfunction flexDirection(\n  str?: 'row' | 'column' | 'row-reverse' | 'column-reverse',\n): FlexDirection {\n  switch (str) {\n    case 'row':\n      return FlexDirection.Row;\n    case 'column':\n      return FlexDirection.Column;\n    case 'row-reverse':\n      return FlexDirection.RowReverse;\n    case 'column-reverse':\n      return FlexDirection.ColumnReverse;\n  }\n  throw new Error(`\"${str}\" is not a valid value for flexDirection`);\n}\n\nfunction flexWrap(str?: 'wrap' | 'nowrap' | 'wrap-reverse'): Wrap {\n  switch (str) {\n    case 'wrap':\n      return Wrap.Wrap;\n    case 'nowrap':\n      return Wrap.NoWrap;\n    case 'wrap-reverse':\n      return Wrap.WrapReverse;\n  }\n  throw new Error(`\"${str}\" is not a valid value for flexWrap`);\n}\n\nfunction justifyContent(str?: JustifyContent): Justify {\n  switch (str) {\n    case 'flex-start':\n      return Justify.FlexStart;\n    case 'flex-end':\n      return Justify.FlexEnd;\n    case 'center':\n      return Justify.Center;\n    case 'space-between':\n      return Justify.SpaceBetween;\n    case 'space-around':\n      return Justify.SpaceAround;\n    case 'space-evenly':\n      return Justify.SpaceEvenly;\n  }\n  throw new Error(`\"${str}\" is not a valid value for justifyContent`);\n}\n\nfunction overflow(str?: 'visible' | 'hidden' | 'scroll'): Overflow {\n  switch (str) {\n    case 'visible':\n      return Overflow.Visible;\n    case 'hidden':\n      return Overflow.Hidden;\n    case 'scroll':\n      return Overflow.Scroll;\n  }\n  throw new Error(`\"${str}\" is not a valid value for overflow`);\n}\n\nfunction position(str?: 'absolute' | 'relative' | 'static'): PositionType {\n  switch (str) {\n    case 'absolute':\n      return PositionType.Absolute;\n    case 'relative':\n      return PositionType.Relative;\n    case 'static':\n      return PositionType.Static;\n  }\n  throw new Error(`\"${str}\" is not a valid value for position`);\n}\n"
  },
  {
    "path": "website/src/components/LayoutBox.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n html[data-theme='light'] {\n  --yg-color-node-depth-0: var(--ifm-color-gray-0);\n  --yg-color-node-depth-1: var(--ifm-color-gray-200);\n  --yg-color-node-depth-2: var(--ifm-color-gray-400);\n  --yg-color-node-depth-3: var(--ifm-color-gray-600);\n  --yg-color-node-depth-4: var(--ifm-color-gray-800);\n\n  --yg-border-node-depth-0: 1px solid var(--ifm-color-gray-200);\n  --yg-border-node-depth-1: 1px solid var(--ifm-color-gray-600);\n  --yg-border-node-depth-2: 1px solid var(--ifm-color-gray-700);\n  --yg-border-node-depth-3: 1px solid var(--ifm-color-gray-800);\n  --yg-border-node-depth-4: 1px solid var(--ifm-color-gray-900);\n}\n\nhtml[data-theme='dark'] {\n  --yg-color-node-depth-0: var(--ifm-color-gray-900);\n  --yg-color-node-depth-1: var(--ifm-color-gray-800);\n  --yg-color-node-depth-2: var(--ifm-color-gray-700);\n  --yg-color-node-depth-3: var(--ifm-color-gray-600);\n  --yg-color-node-depth-4: var(--ifm-color-gray-500);\n\n  --yg-border-node-depth-0: 1px solid var(--ifm-color-gray-800);\n  --yg-border-node-depth-1: 1px solid var(--ifm-color-gray-700);\n  --yg-border-node-depth-2: 1px solid var(--ifm-color-gray-600);\n  --yg-border-node-depth-3: 1px solid var(--ifm-color-gray-500);\n  --yg-border-node-depth-4: 1px solid var(--ifm-color-gray-400);\n}\n\n.layoutBox {\n  box-sizing: border-box;\n  border-radius: 2px;\n}\n\n.zeroDim {\n  border: 0 !important;\n}\n\n.depthZero {\n  background: var(--yg-color-node-depth-0);\n  border: var(--yg-border-node-depth-0);\n}\n\n.depthOne {\n  background-color: var(--yg-color-node-depth-1);\n  border: var(--yg-border-node-depth-1);\n}\n\n.depthTwo {\n  background-color: var(--yg-color-node-depth-2);\n  border: var(--yg-border-node-depth-2);\n}\n\n.depthThree {\n  background-color: var(--yg-color-node-depth-3);\n  border: var(--yg-border-node-depth-3);\n}\n\n.depthFour {\n  background-color: var(--yg-color-node-depth-4);\n  border: var(--yg-border-node-depth-4);\n}\n"
  },
  {
    "path": "website/src/components/LayoutBox.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport styles from './LayoutBox.module.css';\nimport clsx from 'clsx';\n\nexport type LayoutMetrics = {\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n  overflow?: 'visible' | 'hidden' | 'scroll';\n  display?: 'flex' | 'none' | 'contents';\n  children?: LayoutMetrics[];\n};\n\nexport type Props = Readonly<{\n  metrics: LayoutMetrics;\n  className?: string;\n  depth: number;\n}>;\n\nexport default function LayoutBox({metrics, depth, className}: Props) {\n  const {children, ...style} = metrics;\n\n  return (\n    <div\n      className={clsx(\n        styles.layoutBox,\n        (metrics.height === 0 || metrics.width === 0) && styles.zeroDim,\n        depth % 5 == 0 && styles.depthZero,\n        depth % 5 == 1 && styles.depthOne,\n        depth % 5 == 2 && styles.depthTwo,\n        depth % 5 == 3 && styles.depthThree,\n        depth % 5 == 4 && styles.depthFour,\n        className,\n      )}\n      style={{\n        top: style.top,\n        left: style.left,\n        width: style.width,\n        height: style.height,\n        overflow: style.overflow,\n        position: depth === 0 ? 'relative' : 'absolute',\n      }}>\n      {children?.map((child, i) => (\n        <LayoutBox\n          key={i}\n          metrics={child}\n          depth={style.display === 'contents' ? depth : depth + 1}\n        />\n      ))}\n    </div>\n  );\n}\n"
  },
  {
    "path": "website/src/components/Playground.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nhtml[data-theme='light'] {\n  --yg-color-preview-background: var(--ifm-color-primary-lighter);\n  --yg-color-editor-border: var(--ifm-color-gray-400);\n  --yg-color-editor-fallback-bg: rgb(246, 248, 250);\n  --yg-color-editor-fallback-text: rgb(0, 0, 159);\n}\n\nhtml[data-theme='dark'] {\n  --yg-color-preview-background: var(--ifm-color-primary-dark);\n  --yg-color-editor-border: var(--ifm-color-gray-800);\n  --yg-color-editor-fallback-bg: rgb(40, 44, 52);\n  --yg-color-editor-fallback-text: rgb(209, 154, 102);\n}\n\n.wrapper {\n  min-width: 600px;\n  padding-block: 16px;\n}\n\n.playgroundRow {\n  display: flex;\n  flex-direction: row;\n  column-gap: 16px;\n}\n\n.editorColumn {\n  flex: 8;\n  min-width: 0;\n  overflow-y: auto;\n  border: 1px solid var(--yg-color-editor-border);\n  border-radius: var(--ifm-pre-border-radius);\n  position: relative;\n}\n\n.editorScroll {\n overflow-y: auto;\n}\n\n.editorToolbar {\n  position: absolute;\n  top: var(--ifm-pre-padding);\n  right: var(--ifm-pre-padding);\n}\n\n.playgroundEditor {\n  font: var(--ifm-code-font-size) / var(--ifm-pre-line-height)\n    var(--ifm-font-family-monospace) !important;\n  direction: ltr;\n  height: calc(var(--yg-playground-height) - 32px);\n}\n\n.playgroundEditor :global(.prism-code) {\n  box-shadow: var(--ifm-global-shadow-lw);\n  height: calc(var(--yg-playground-height) - 32px);\n  min-height: 300px;\n  border-radius: 0;\n  padding: var(--ifm-pre-padding) !important;\n}\n\n.liveEditorFallback {\n  background-color: var(--yg-color-editor-fallback-bg);\n  color: var(--yg-color-editor-fallback-text);\n}\n\n.previewColumn {\n  display: flex;\n  flex: 5;\n  height: calc(var(--yg-playground-height) - 32px);\n  min-height: 300px;\n  align-items: center;\n  justify-content: center;\n  background-color: var(--yg-color-preview-background);\n  overflow: hidden;\n  border-radius: var(--ifm-pre-border-radius);\n  align-self: stretch;\n  box-shadow: var(--ifm-global-shadow-lw);\n}\n\n.livePreviewWrapper {\n  box-shadow: var(--ifm-global-shadow-md);\n}\n\n.liveError {\n  align-self: flex-start;\n  font-size: 12px;\n  box-shadow: var(--ifm-global-shadow-lw);\n  background-color:var(--ifm-color-danger-darker);\n  color: white;\n  width: 100%;\n  text-align: center;\n  margin: 10px;\n}\n\n@media (max-width: 996px) {\n  .wrapper {\n    min-width: 100%;\n  }\n\n  .playgroundEditor {\n    height: unset;\n  }\n\n  .playgroundEditor :global(.prism-code) {\n    height: unset;\n    min-height: 10em;\n  }\n\n  .playgroundRow {\n    flex-direction: column;\n  }\n\n  .editorColumn {\n    padding: 0;\n    margin-bottom: 10px;\n    flex: unset;\n  }\n\n  .previewColumn {\n    padding: 10px;\n    width: 100%;\n    flex: unset;\n  }\n}\n"
  },
  {
    "path": "website/src/components/Playground.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport React, {\n  CSSProperties,\n  Suspense,\n  lazy,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\n\nimport {usePrismTheme} from '@docusaurus/theme-common';\nimport clsx from 'clsx';\nimport {LiveProvider, LiveEditor, LivePreview, LiveError} from 'react-live';\nimport EditorToolbar from './EditorToolbar';\n\nimport type {FlexStyle} from './FlexStyle';\nimport type {StyleNode} from './YogaViewer';\n\nimport styles from './Playground.module.css';\nimport useIsBrowser from '@docusaurus/useIsBrowser';\n\nexport type Props = Readonly<{\n  code: string;\n  height?: CSSProperties['height'];\n  autoFocus?: boolean;\n}>;\n\nexport default function Playground({code, height, autoFocus}: Props) {\n  const prismTheme = usePrismTheme();\n  const editorScrollRef = useRef<HTMLDivElement>(null);\n  const isBrowser = useIsBrowser();\n\n  const [liveCode, setLiveCode] = useState(code);\n  const [hasCodeChanged, setHasCodeChanged] = useState(false);\n  const [scrollbarWidth, setScrollbarWidth] = useState(0);\n\n  // Once react-live has hydrated the content-editable area, set focus to it\n  // if requested\n  useEffect(() => {\n    if (autoFocus && hasCodeChanged) {\n      const codeElem = editorScrollRef?.current?.querySelector('.prism-code');\n      const sel = window.getSelection();\n      if (codeElem?.clientHeight && sel != null) {\n        sel.selectAllChildren(codeElem);\n        sel.collapseToStart();\n      }\n    }\n  }, [autoFocus, hasCodeChanged]);\n\n  useLayoutEffect(() => {\n    // The toolbar is positioned relative to the outside of the scrolling\n    // container so it stays in the same place when scrolling, but this means\n    // it isn't automatically adjusted for scrollbar width. If code change\n    // causes overflow/scrollbar, adjust its position based on its width progrmatically.\n    if (editorScrollRef.current) {\n      setScrollbarWidth(\n        editorScrollRef.current.offsetWidth -\n          editorScrollRef.current.clientWidth,\n      );\n    }\n  }, [editorScrollRef, code]);\n\n  const heightStyle = height\n    ? ({'--yg-playground-height': height} as React.CSSProperties)\n    : undefined;\n\n  const handleCodeChange = useCallback((code: string) => {\n    setHasCodeChanged(true);\n    setLiveCode(code);\n  }, []);\n\n  return (\n    <LiveProvider\n      code={liveCode}\n      theme={prismTheme}\n      scope={{Node: LiveNode, Layout: RootLiveNode}}>\n      <div className={styles.wrapper} style={heightStyle}>\n        <div className={clsx(styles.playgroundRow)}>\n          <div className={clsx(styles.editorColumn, 'playground-editor')}>\n            <div className={styles.editorScroll} ref={editorScrollRef}>\n              <EditorToolbar\n                code={liveCode}\n                className={styles.editorToolbar}\n                style={{paddingRight: scrollbarWidth + 'px'}}\n              />\n\n              {isBrowser ? (\n                <LiveEditor\n                  className={clsx(styles.playgroundEditor)}\n                  onChange={handleCodeChange}\n                />\n              ) : (\n                <LiveEditorFallback code={liveCode} />\n              )}\n            </div>\n          </div>\n          <div className={clsx(styles.previewColumn)}>\n            <LivePreview className={clsx(styles.livePreview)} />\n            <LiveError className={clsx(styles.liveError)} />\n          </div>\n        </div>\n      </div>\n    </LiveProvider>\n  );\n}\n\n/**\n * Provides a non-editable approximation of the LiveEditor result, without\n * relying on prism rendering, for use during SSR.\n * See https://github.com/facebook/docusaurus/issues/9629\n */\nfunction LiveEditorFallback({code}: Readonly<{code: string}>) {\n  return (\n    <div className={clsx(styles.playgroundEditor)}>\n      <pre className={clsx('prism-code', styles.liveEditorFallback)}>\n        {code}\n      </pre>\n    </div>\n  );\n}\n\ntype RootLiveNodeProps = Readonly<{\n  children: React.ReactNode;\n  config?: {useWebDefaults?: boolean};\n}>;\n\nfunction RootLiveNode({children, config}: RootLiveNodeProps) {\n  if (React.Children.count(children) !== 1) {\n    return null;\n  }\n\n  const child = React.Children.only(children);\n  if (!React.isValidElement(child) || child.type !== LiveNode) {\n    return null;\n  }\n\n  const styleNode = styleNodeFromLiveNode(child as unknown as LiveNode);\n\n  return (\n    <Suspense fallback={null}>\n      <LazyYogaViewer\n        rootNode={styleNode}\n        useWebDefaults={config?.useWebDefaults}\n      />\n    </Suspense>\n  );\n}\n\ntype LiveNodeProps = Readonly<{\n  children: React.ReactNode;\n  style: FlexStyle;\n}>;\n\nclass LiveNode extends React.PureComponent<LiveNodeProps> {}\n\nfunction styleNodeFromLiveNode(\n  liveNode: React.ElementRef<typeof LiveNode>,\n): StyleNode {\n  const children: StyleNode[] = [];\n\n  React.Children.forEach(liveNode.props.children, child => {\n    if (React.isValidElement(child) && child.type === LiveNode) {\n      children.push(styleNodeFromLiveNode(child as unknown as LiveNode));\n    }\n  });\n\n  return {\n    style: liveNode.props.style,\n    children,\n  };\n}\n\n// Docusaurus SSR does not correctly support top-level await in the import\n// chain\n// 1. https://github.com/facebook/docusaurus/issues/7238\n// 2. https://github.com/facebook/docusaurus/issues/9468\nconst LazyYogaViewer = lazy(() => import('./YogaViewer'));\n"
  },
  {
    "path": "website/src/components/YogaViewer.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useMemo} from 'react';\nimport Yoga, {\n  Direction,\n  Display,\n  Overflow,\n  Node as YogaNode,\n} from 'yoga-layout';\nimport {FlexStyle, applyStyle} from './FlexStyle';\nimport LayoutBox from './LayoutBox';\n\nimport type {LayoutMetrics} from './LayoutBox';\n\nexport type Props = Readonly<{\n  rootNode: StyleNode;\n  width?: number;\n  height?: number;\n  className?: string;\n  useWebDefaults?: boolean;\n}>;\n\nexport type StyleNode = {\n  style?: FlexStyle;\n  children?: StyleNode[];\n};\n\nexport default function YogaViewer({\n  rootNode,\n  width,\n  height,\n  className,\n  useWebDefaults,\n}: Props) {\n  const layout = useMemo(\n    () => layoutStyleTree(rootNode, width, height, {useWebDefaults}),\n    [rootNode, width, height, useWebDefaults],\n  );\n  return <LayoutBox metrics={layout} depth={0} className={className} />;\n}\n\ntype LayoutConfig = Readonly<{\n  useWebDefaults?: boolean;\n}>;\n\n// This is not efficient and not a good real-world-example for the best way to use Yoga, but sufficient for a playground\nfunction layoutStyleTree(\n  node: StyleNode,\n  rootWidth: number | undefined,\n  rootHeight: number | undefined,\n  layoutConfig: LayoutConfig,\n): LayoutMetrics {\n  const root = yogaNodeFromStyleNode(node, layoutConfig);\n  root.calculateLayout(rootWidth, rootHeight, Direction.LTR);\n\n  const layoutMetrics = metricsFromYogaNode(root);\n  layoutMetrics.overflow = node.style?.overflow;\n\n  return layoutMetrics;\n}\n\nfunction yogaNodeFromStyleNode(\n  styleNode: StyleNode,\n  layoutConfig: LayoutConfig,\n): YogaNode {\n  const node = Yoga.Node.create(\n    layoutConfig.useWebDefaults ? webDefaultsConfig : undefined,\n  );\n  applyStyle(node, styleNode.style);\n\n  for (const child of styleNode.children ?? []) {\n    node.insertChild(\n      yogaNodeFromStyleNode(child, layoutConfig),\n      node.getChildCount(),\n    );\n  }\n\n  return node;\n}\n\nconst webDefaultsConfig = Yoga.Config.create();\nwebDefaultsConfig.setUseWebDefaults(true);\n\nfunction metricsFromYogaNode(node: YogaNode): LayoutMetrics {\n  const children: LayoutMetrics[] = [];\n  for (let i = 0; i < node.getChildCount(); i++) {\n    children.push(metricsFromYogaNode(node.getChild(i)));\n  }\n\n  // Offset is relative to parent padding box, so we need to subtract the extra\n  // border we show as part of the box.\n  const parentBorderThickness = 1;\n\n  return {\n    top: node.getComputedTop() - parentBorderThickness,\n    left: node.getComputedLeft() - parentBorderThickness,\n    width: node.getComputedWidth(),\n    height: node.getComputedHeight(),\n    overflow: (() => {\n      switch (node.getOverflow()) {\n        case Overflow.Hidden:\n          return 'hidden';\n        case Overflow.Scroll:\n          return 'scroll';\n        case Overflow.Visible:\n          return 'visible';\n      }\n    })(),\n    display: (() => {\n      switch (node.getDisplay()) {\n        case Display.Flex:\n          return 'flex';\n        case Display.None:\n          return 'none';\n        case Display.Contents:\n          return 'contents';\n      }\n    })(),\n    children,\n  };\n}\n"
  },
  {
    "path": "website/src/css/custom.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framework designed to\n * work well for content-centric websites.\n */\n\n/* You can override the default Infima variables here. */\n:root {\n  --ifm-color-primary-lightest: rgb(99, 183, 168);\n  --ifm-color-primary-lighter: rgb(70, 159, 143);\n  --ifm-color-primary-light: rgb(48, 135, 119);\n  --ifm-color-primary: rgb(33, 111, 97);\n  --ifm-color-primary-dark: rgb(22, 87, 75);\n  --ifm-color-primary-darker: rgb(14, 63, 54);\n  --ifm-color-primary-darkest: rgb(8, 39, 33);\n  --ifm-code-font-size: 95%;\n  --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);\n}\n\n/* For readability concerns, you should choose a lighter palette in dark mode. */\n[data-theme='dark'] {\n  --ifm-color-primary-lightest: rgb(192, 231, 224);\n  --ifm-color-primary-lighter: rgb(146, 207, 196);\n  --ifm-color-primary-light: rgb(106, 183, 169);\n  --ifm-color-primary: rgb(74, 159, 144);\n  --ifm-color-primary-dark: rgb(51, 135, 120);\n  --ifm-color-primary-darker: rgb(34, 111, 97);\n  --ifm-color-primary-darkest: rgb(22, 87, 75);\n  --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);\n}\n"
  },
  {
    "path": "website/src/pages/index.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n.heroBanner {\n  justify-content: center;\n }\n\n.heroRow {\n  align-items: center;\n  justify-content: center;\n}\n\n.heroLogo {\n  width: 200px;\n  height: 200px;\n }\n\n@media (max-width: 996px) {\n  .heroLogo {\n    display: none;\n  }\n\n  .playgroundSection :global(.playground-editor) {\n    display: none;\n  }\n}\n\n.bg {\n  background-color: var(--yg-color-playground-background);\n}\n"
  },
  {
    "path": "website/src/pages/index.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport clsx from 'clsx';\nimport Link from '@docusaurus/Link';\nimport Layout from '@theme/Layout';\n\nimport styles from './index.module.css';\n\nimport YogaLogo from '../../static/img/logo.svg';\nimport Playground from '../components/Playground';\n\nfunction HeroSection() {\n  return (\n    <header className={clsx('hero', styles.heroBanner)}>\n      <div className={clsx('row', 'container', styles.heroRow)}>\n        <div className=\"col col--6\">\n          <h1 className=\"hero__title\">Yoga</h1>\n          <p className=\"hero__subtitle\">\n            A portable layout engine targeting web standards\n          </p>\n\n          <Link\n            className=\"button button--primary button--lg\"\n            to=\"/docs/about-yoga\">\n            Learn more\n          </Link>\n        </div>\n        <div className=\"col col--2\">\n          <YogaLogo className={styles.heroLogo} />\n        </div>\n      </div>\n    </header>\n  );\n}\n\nconst playgroundCode = `\n<Layout config={{useWebDefaults: false}}>\n  <Node style={{width: 250, height: 475, padding: 10}}>\n    <Node style={{flex: 1, rowGap: 10}}>\n      <Node style={{height: 60}} />\n      <Node style={{flex: 1, marginInline: 10}} />\n      <Node style={{flex: 2, marginInline: 10}} />\n      <Node\n        style={{\n          position: \"absolute\",\n          width: \"100%\",\n          bottom: 0,\n          height: 64,\n          flexDirection: \"row\",\n          alignItems: \"center\",\n          justifyContent: \"space-around\",\n        }}\n      >\n        <Node style={{height: 40, width: 40}} />\n        <Node style={{height: 40, width: 40}} />\n        <Node style={{height: 40, width: 40}} />\n        <Node style={{height: 40, width: 40}} />\n      </Node>\n    </Node>\n  </Node>\n</Layout>\n`.trim();\n\nfunction PlaygroundSection() {\n  return (\n    <main className={clsx('container', styles.playgroundSection)}>\n      <Playground height=\"600px\" code={playgroundCode} autoFocus={true} />\n    </main>\n  );\n}\n\nexport default function Home() {\n  return (\n    <Layout description=\"Documentation for the Yoga layout engine\">\n      <HeroSection />\n      <PlaygroundSection />\n    </Layout>\n  );\n}\n"
  },
  {
    "path": "website/src/pages/markdown-page.md",
    "content": "---\ntitle: Markdown page example\n---\n\n# Markdown page example\n\nYou don't need React to write simple standalone pages.\n"
  },
  {
    "path": "website/src/pages/playground.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n.playgroundContainer {\n  display: flex;\n  flex: 1;\n}\n"
  },
  {
    "path": "website/src/pages/playground.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport Layout from '@theme/Layout';\nimport {useLocation} from '@docusaurus/router';\nimport lzString from 'lz-string';\n\nimport Playground from '../components/Playground';\n\nimport clsx from 'clsx';\nimport styles from './playground.module.css';\nimport useIsBrowser from '@docusaurus/useIsBrowser';\n\nconst defaultCode = `\n<Layout config={{useWebDefaults: false}}>\n  <Node style={{width: 350, height: 350, padding: 20}}>\n    <Node style={{flex: 1}} />\n  </Node>\n</Layout>\n`.trim();\n\nexport default function PlaygroundPage() {\n  const code = useCodeFromQueryParam();\n\n  return (\n    // @ts-ignore missing prop for `wrapperClassName`\n    <Layout wrapperClassName={clsx('container', styles.bg)} title=\"Playground\">\n      <Playground\n        height=\"max(80vh, 600px)\"\n        code={code}\n        autoFocus={true}\n        key={String(useIsBrowser())}\n      />\n    </Layout>\n  );\n}\n\nfunction useCodeFromQueryParam(): string {\n  const location = useLocation();\n\n  // We don't know the query param ahead of time when doing SSR, so just render\n  // blank to avoid the appearance of code changing.\n  if (!useIsBrowser()) {\n    return '';\n  }\n\n  const params = new URLSearchParams(location.search);\n  const codeParam = params.get('code');\n  return codeParam\n    ? lzString.decompressFromEncodedURIComponent(codeParam)\n    : defaultCode;\n}\n"
  },
  {
    "path": "website/static/.nojekyll",
    "content": ""
  },
  {
    "path": "website/tsconfig.json",
    "content": "{\n  // This file is not used in compilation. It is here just for a nice editor experience.\n  \"extends\": \"@docusaurus/tsconfig\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"target\": \"es2022\",\n    \"allowImportingTsExtensions\": true,\n    \"strict\": true\n  }\n}\n"
  },
  {
    "path": "yoga/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\ncmake_minimum_required(VERSION 3.13...3.26)\nproject(yogacore)\nset(CMAKE_VERBOSE_MAKEFILE on)\n\nif(TARGET yogacore)\n    return()\nendif()\n\ninclude(CheckIPOSupported)\n\nset(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)\ninclude(${YOGA_ROOT}/cmake/project-defaults.cmake)\n\n\nfile(GLOB SOURCES CONFIGURE_DEPENDS\n    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp\n    ${CMAKE_CURRENT_SOURCE_DIR}/**/*.cpp)\n\nadd_library(yogacore STATIC ${SOURCES})\n\n# Yoga conditionally uses <android/log> when building for Android\nif (ANDROID)\n    target_link_libraries(yogacore log)\nendif()\n\ncheck_ipo_supported(RESULT result)\nif(result)\n  set_target_properties(yogacore PROPERTIES\n    CMAKE_INTERPROCEDURAL_OPTIMIZATION true)\nendif()\n\ntarget_include_directories(yogacore\n    PUBLIC\n    $<BUILD_INTERFACE:${YOGA_ROOT}>\n    $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/yoga>)\n"
  },
  {
    "path": "yoga/YGConfig.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/debug/Log.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nYGConfigRef YGConfigNew(void) {\n  return new yoga::Config(getDefaultLogger());\n}\n\nvoid YGConfigFree(const YGConfigRef config) {\n  delete resolveRef(config);\n}\n\nYGConfigConstRef YGConfigGetDefault() {\n  return &yoga::Config::getDefault();\n}\n\nvoid YGConfigSetUseWebDefaults(const YGConfigRef config, const bool enabled) {\n  resolveRef(config)->setUseWebDefaults(enabled);\n}\n\nbool YGConfigGetUseWebDefaults(const YGConfigConstRef config) {\n  return resolveRef(config)->useWebDefaults();\n}\n\nvoid YGConfigSetPointScaleFactor(\n    const YGConfigRef config,\n    const float pixelsInPoint) {\n  yoga::assertFatalWithConfig(\n      resolveRef(config),\n      pixelsInPoint >= 0.0f,\n      \"Scale factor should not be less than zero\");\n\n  resolveRef(config)->setPointScaleFactor(pixelsInPoint);\n}\n\nfloat YGConfigGetPointScaleFactor(const YGConfigConstRef config) {\n  return resolveRef(config)->getPointScaleFactor();\n}\n\nvoid YGConfigSetErrata(YGConfigRef config, YGErrata errata) {\n  resolveRef(config)->setErrata(scopedEnum(errata));\n}\n\nYGErrata YGConfigGetErrata(YGConfigConstRef config) {\n  return unscopedEnum(resolveRef(config)->getErrata());\n}\n\nvoid YGConfigSetLogger(const YGConfigRef config, YGLogger logger) {\n  if (logger != nullptr) {\n    resolveRef(config)->setLogger(logger);\n  } else {\n    resolveRef(config)->setLogger(getDefaultLogger());\n  }\n}\n\nvoid YGConfigSetContext(const YGConfigRef config, void* context) {\n  resolveRef(config)->setContext(context);\n}\n\nvoid* YGConfigGetContext(const YGConfigConstRef config) {\n  return resolveRef(config)->getContext();\n}\n\nvoid YGConfigSetExperimentalFeatureEnabled(\n    const YGConfigRef config,\n    const YGExperimentalFeature feature,\n    const bool enabled) {\n  resolveRef(config)->setExperimentalFeatureEnabled(\n      scopedEnum(feature), enabled);\n}\n\nbool YGConfigIsExperimentalFeatureEnabled(\n    const YGConfigConstRef config,\n    const YGExperimentalFeature feature) {\n  return resolveRef(config)->isExperimentalFeatureEnabled(scopedEnum(feature));\n}\n\nvoid YGConfigSetCloneNodeFunc(\n    const YGConfigRef config,\n    const YGCloneNodeFunc callback) {\n  resolveRef(config)->setCloneNodeCallback(callback);\n}\n"
  },
  {
    "path": "yoga/YGConfig.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stddef.h>\n\n#include <yoga/YGEnums.h>\n#include <yoga/YGMacros.h>\n\nYG_EXTERN_C_BEGIN\n\ntypedef struct YGNode* YGNodeRef;\ntypedef const struct YGNode* YGNodeConstRef;\n\n/**\n * Handle to a mutable Yoga configuration.\n */\ntypedef struct YGConfig* YGConfigRef;\n\n/**\n * Handle to an immutable Yoga configuration.\n */\ntypedef const struct YGConfig* YGConfigConstRef;\n\n/**\n * Allocates a set of configuration options. The configuration may be applied to\n * multiple nodes (i.e. a single global config), or can be applied more\n * granularly per-node.\n */\nYG_EXPORT YGConfigRef YGConfigNew(void);\n\n/**\n * Frees the associated Yoga configuration.\n */\nYG_EXPORT void YGConfigFree(YGConfigRef config);\n\n/**\n * Returns the default config values set by Yoga.\n */\nYG_EXPORT YGConfigConstRef YGConfigGetDefault(void);\n\n/**\n * Yoga by default creates new nodes with style defaults different from flexbox\n * on web (e.g. `YGFlexDirectionColumn` and `YGPositionRelative`).\n * `UseWebDefaults` instructs Yoga to instead use a default style consistent\n * with the web.\n */\nYG_EXPORT void YGConfigSetUseWebDefaults(YGConfigRef config, bool enabled);\n\n/**\n * Whether the configuration is set to use web defaults.\n */\nYG_EXPORT bool YGConfigGetUseWebDefaults(YGConfigConstRef config);\n\n/**\n * Yoga will by default round final layout positions and dimensions to the\n * nearst point. `pointScaleFactor` controls the density of the grid used for\n * layout rounding (e.g. to round to the closest display pixel).\n *\n * May be set to 0.0f to avoid rounding the layout results.\n */\nYG_EXPORT void YGConfigSetPointScaleFactor(\n    YGConfigRef config,\n    float pixelsInPoint);\n\n/**\n * Get the currently set point scale factor.\n */\nYG_EXPORT float YGConfigGetPointScaleFactor(YGConfigConstRef config);\n\n/**\n * Configures how Yoga balances W3C conformance vs compatibility with layouts\n * created against earlier versions of Yoga.\n *\n * By default Yoga will prioritize W3C conformance. `Errata` may be set to ask\n * Yoga to produce specific incorrect behaviors. E.g. `YGConfigSetErrata(config,\n * YGErrataStretchFlexBasis)`.\n *\n * YGErrata is a bitmask, and multiple errata may be set at once. Predefined\n * constants exist for convenience:\n * 1. YGErrataNone: No errata\n * 2. YGErrataClassic: Match layout behaviors of Yoga 1.x\n * 3. YGErrataAll: Match layout behaviors of Yoga 1.x, including\n * `UseLegacyStretchBehaviour`\n */\nYG_EXPORT void YGConfigSetErrata(YGConfigRef config, YGErrata errata);\n\n/**\n * Get the currently set errata.\n */\nYG_EXPORT YGErrata YGConfigGetErrata(YGConfigConstRef config);\n\n/**\n * Function pointer type for YGConfigSetLogger.\n */\ntypedef int (*YGLogger)(\n    YGConfigConstRef config,\n    YGNodeConstRef node,\n    YGLogLevel level,\n    const char* format,\n    va_list args);\n\n/**\n * Set a custom log function for to use when logging diagnostics or fatal.\n * errors.\n */\nYG_EXPORT void YGConfigSetLogger(YGConfigRef config, YGLogger logger);\n\n/**\n * Sets an arbitrary context pointer on the config which may be read from during\n * callbacks.\n */\nYG_EXPORT void YGConfigSetContext(YGConfigRef config, void* context);\n\n/**\n * Gets the currently set context.\n */\nYG_EXPORT void* YGConfigGetContext(YGConfigConstRef config);\n\n/**\n * Function pointer type for YGConfigSetCloneNodeFunc.\n */\ntypedef YGNodeRef (*YGCloneNodeFunc)(\n    YGNodeConstRef oldNode,\n    YGNodeConstRef owner,\n    size_t childIndex);\n\n/**\n * Enable an experimental/unsupported feature in Yoga.\n */\nYG_EXPORT void YGConfigSetExperimentalFeatureEnabled(\n    YGConfigRef config,\n    YGExperimentalFeature feature,\n    bool enabled);\n\n/**\n * Whether an experimental feature is set.\n */\nYG_EXPORT bool YGConfigIsExperimentalFeatureEnabled(\n    YGConfigConstRef config,\n    YGExperimentalFeature feature);\n\n/**\n * Sets a callback, called during layout, to create a new mutable Yoga node if\n * Yoga must write to it and its owner is not its parent observed during layout.\n */\nYG_EXPORT void YGConfigSetCloneNodeFunc(\n    YGConfigRef config,\n    YGCloneNodeFunc callback);\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGEnums.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#include <yoga/YGEnums.h>\n\nconst char* YGAlignToString(const YGAlign value) {\n  switch (value) {\n    case YGAlignAuto:\n      return \"auto\";\n    case YGAlignFlexStart:\n      return \"flex-start\";\n    case YGAlignCenter:\n      return \"center\";\n    case YGAlignFlexEnd:\n      return \"flex-end\";\n    case YGAlignStretch:\n      return \"stretch\";\n    case YGAlignBaseline:\n      return \"baseline\";\n    case YGAlignSpaceBetween:\n      return \"space-between\";\n    case YGAlignSpaceAround:\n      return \"space-around\";\n    case YGAlignSpaceEvenly:\n      return \"space-evenly\";\n    case YGAlignStart:\n      return \"start\";\n    case YGAlignEnd:\n      return \"end\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGBoxSizingToString(const YGBoxSizing value) {\n  switch (value) {\n    case YGBoxSizingBorderBox:\n      return \"border-box\";\n    case YGBoxSizingContentBox:\n      return \"content-box\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGDimensionToString(const YGDimension value) {\n  switch (value) {\n    case YGDimensionWidth:\n      return \"width\";\n    case YGDimensionHeight:\n      return \"height\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGDirectionToString(const YGDirection value) {\n  switch (value) {\n    case YGDirectionInherit:\n      return \"inherit\";\n    case YGDirectionLTR:\n      return \"ltr\";\n    case YGDirectionRTL:\n      return \"rtl\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGDisplayToString(const YGDisplay value) {\n  switch (value) {\n    case YGDisplayFlex:\n      return \"flex\";\n    case YGDisplayNone:\n      return \"none\";\n    case YGDisplayContents:\n      return \"contents\";\n    case YGDisplayGrid:\n      return \"grid\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGEdgeToString(const YGEdge value) {\n  switch (value) {\n    case YGEdgeLeft:\n      return \"left\";\n    case YGEdgeTop:\n      return \"top\";\n    case YGEdgeRight:\n      return \"right\";\n    case YGEdgeBottom:\n      return \"bottom\";\n    case YGEdgeStart:\n      return \"start\";\n    case YGEdgeEnd:\n      return \"end\";\n    case YGEdgeHorizontal:\n      return \"horizontal\";\n    case YGEdgeVertical:\n      return \"vertical\";\n    case YGEdgeAll:\n      return \"all\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGErrataToString(const YGErrata value) {\n  switch (value) {\n    case YGErrataNone:\n      return \"none\";\n    case YGErrataStretchFlexBasis:\n      return \"stretch-flex-basis\";\n    case YGErrataAbsolutePositionWithoutInsetsExcludesPadding:\n      return \"absolute-position-without-insets-excludes-padding\";\n    case YGErrataAbsolutePercentAgainstInnerSize:\n      return \"absolute-percent-against-inner-size\";\n    case YGErrataAll:\n      return \"all\";\n    case YGErrataClassic:\n      return \"classic\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGExperimentalFeatureToString(const YGExperimentalFeature value) {\n  switch (value) {\n    case YGExperimentalFeatureWebFlexBasis:\n      return \"web-flex-basis\";\n    case YGExperimentalFeatureFixFlexBasisFitContent:\n      return \"fix-flex-basis-fit-content\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGFlexDirectionToString(const YGFlexDirection value) {\n  switch (value) {\n    case YGFlexDirectionColumn:\n      return \"column\";\n    case YGFlexDirectionColumnReverse:\n      return \"column-reverse\";\n    case YGFlexDirectionRow:\n      return \"row\";\n    case YGFlexDirectionRowReverse:\n      return \"row-reverse\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGGridTrackTypeToString(const YGGridTrackType value) {\n  switch (value) {\n    case YGGridTrackTypeAuto:\n      return \"auto\";\n    case YGGridTrackTypePoints:\n      return \"points\";\n    case YGGridTrackTypePercent:\n      return \"percent\";\n    case YGGridTrackTypeFr:\n      return \"fr\";\n    case YGGridTrackTypeMinmax:\n      return \"minmax\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGGutterToString(const YGGutter value) {\n  switch (value) {\n    case YGGutterColumn:\n      return \"column\";\n    case YGGutterRow:\n      return \"row\";\n    case YGGutterAll:\n      return \"all\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGJustifyToString(const YGJustify value) {\n  switch (value) {\n    case YGJustifyAuto:\n      return \"auto\";\n    case YGJustifyFlexStart:\n      return \"flex-start\";\n    case YGJustifyCenter:\n      return \"center\";\n    case YGJustifyFlexEnd:\n      return \"flex-end\";\n    case YGJustifySpaceBetween:\n      return \"space-between\";\n    case YGJustifySpaceAround:\n      return \"space-around\";\n    case YGJustifySpaceEvenly:\n      return \"space-evenly\";\n    case YGJustifyStretch:\n      return \"stretch\";\n    case YGJustifyStart:\n      return \"start\";\n    case YGJustifyEnd:\n      return \"end\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGLogLevelToString(const YGLogLevel value) {\n  switch (value) {\n    case YGLogLevelError:\n      return \"error\";\n    case YGLogLevelWarn:\n      return \"warn\";\n    case YGLogLevelInfo:\n      return \"info\";\n    case YGLogLevelDebug:\n      return \"debug\";\n    case YGLogLevelVerbose:\n      return \"verbose\";\n    case YGLogLevelFatal:\n      return \"fatal\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGMeasureModeToString(const YGMeasureMode value) {\n  switch (value) {\n    case YGMeasureModeUndefined:\n      return \"undefined\";\n    case YGMeasureModeExactly:\n      return \"exactly\";\n    case YGMeasureModeAtMost:\n      return \"at-most\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGNodeTypeToString(const YGNodeType value) {\n  switch (value) {\n    case YGNodeTypeDefault:\n      return \"default\";\n    case YGNodeTypeText:\n      return \"text\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGOverflowToString(const YGOverflow value) {\n  switch (value) {\n    case YGOverflowVisible:\n      return \"visible\";\n    case YGOverflowHidden:\n      return \"hidden\";\n    case YGOverflowScroll:\n      return \"scroll\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGPositionTypeToString(const YGPositionType value) {\n  switch (value) {\n    case YGPositionTypeStatic:\n      return \"static\";\n    case YGPositionTypeRelative:\n      return \"relative\";\n    case YGPositionTypeAbsolute:\n      return \"absolute\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGUnitToString(const YGUnit value) {\n  switch (value) {\n    case YGUnitUndefined:\n      return \"undefined\";\n    case YGUnitPoint:\n      return \"point\";\n    case YGUnitPercent:\n      return \"percent\";\n    case YGUnitAuto:\n      return \"auto\";\n    case YGUnitMaxContent:\n      return \"max-content\";\n    case YGUnitFitContent:\n      return \"fit-content\";\n    case YGUnitStretch:\n      return \"stretch\";\n  }\n  return \"unknown\";\n}\n\nconst char* YGWrapToString(const YGWrap value) {\n  switch (value) {\n    case YGWrapNoWrap:\n      return \"no-wrap\";\n    case YGWrapWrap:\n      return \"wrap\";\n    case YGWrapWrapReverse:\n      return \"wrap-reverse\";\n  }\n  return \"unknown\";\n}\n"
  },
  {
    "path": "yoga/YGEnums.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n#include <yoga/YGMacros.h>\n\nYG_EXTERN_C_BEGIN\n\nYG_ENUM_DECL(\n    YGAlign,\n    YGAlignAuto,\n    YGAlignFlexStart,\n    YGAlignCenter,\n    YGAlignFlexEnd,\n    YGAlignStretch,\n    YGAlignBaseline,\n    YGAlignSpaceBetween,\n    YGAlignSpaceAround,\n    YGAlignSpaceEvenly,\n    YGAlignStart,\n    YGAlignEnd)\n\nYG_ENUM_DECL(\n    YGBoxSizing,\n    YGBoxSizingBorderBox,\n    YGBoxSizingContentBox)\n\nYG_ENUM_DECL(\n    YGDimension,\n    YGDimensionWidth,\n    YGDimensionHeight)\n\nYG_ENUM_DECL(\n    YGDirection,\n    YGDirectionInherit,\n    YGDirectionLTR,\n    YGDirectionRTL)\n\nYG_ENUM_DECL(\n    YGDisplay,\n    YGDisplayFlex,\n    YGDisplayNone,\n    YGDisplayContents,\n    YGDisplayGrid)\n\nYG_ENUM_DECL(\n    YGEdge,\n    YGEdgeLeft,\n    YGEdgeTop,\n    YGEdgeRight,\n    YGEdgeBottom,\n    YGEdgeStart,\n    YGEdgeEnd,\n    YGEdgeHorizontal,\n    YGEdgeVertical,\n    YGEdgeAll)\n\nYG_ENUM_DECL(\n    YGErrata,\n    YGErrataNone = 0,\n    YGErrataStretchFlexBasis = 1,\n    YGErrataAbsolutePositionWithoutInsetsExcludesPadding = 2,\n    YGErrataAbsolutePercentAgainstInnerSize = 4,\n    YGErrataAll = 2147483647,\n    YGErrataClassic = 2147483646)\nYG_DEFINE_ENUM_FLAG_OPERATORS(YGErrata)\n\nYG_ENUM_DECL(\n    YGExperimentalFeature,\n    YGExperimentalFeatureWebFlexBasis,\n    YGExperimentalFeatureFixFlexBasisFitContent)\n\nYG_ENUM_DECL(\n    YGFlexDirection,\n    YGFlexDirectionColumn,\n    YGFlexDirectionColumnReverse,\n    YGFlexDirectionRow,\n    YGFlexDirectionRowReverse)\n\nYG_ENUM_DECL(\n    YGGridTrackType,\n    YGGridTrackTypeAuto,\n    YGGridTrackTypePoints,\n    YGGridTrackTypePercent,\n    YGGridTrackTypeFr,\n    YGGridTrackTypeMinmax)\n\nYG_ENUM_DECL(\n    YGGutter,\n    YGGutterColumn,\n    YGGutterRow,\n    YGGutterAll)\n\nYG_ENUM_DECL(\n    YGJustify,\n    YGJustifyAuto,\n    YGJustifyFlexStart,\n    YGJustifyCenter,\n    YGJustifyFlexEnd,\n    YGJustifySpaceBetween,\n    YGJustifySpaceAround,\n    YGJustifySpaceEvenly,\n    YGJustifyStretch,\n    YGJustifyStart,\n    YGJustifyEnd)\n\nYG_ENUM_DECL(\n    YGLogLevel,\n    YGLogLevelError,\n    YGLogLevelWarn,\n    YGLogLevelInfo,\n    YGLogLevelDebug,\n    YGLogLevelVerbose,\n    YGLogLevelFatal)\n\nYG_ENUM_DECL(\n    YGMeasureMode,\n    YGMeasureModeUndefined,\n    YGMeasureModeExactly,\n    YGMeasureModeAtMost)\n\nYG_ENUM_DECL(\n    YGNodeType,\n    YGNodeTypeDefault,\n    YGNodeTypeText)\n\nYG_ENUM_DECL(\n    YGOverflow,\n    YGOverflowVisible,\n    YGOverflowHidden,\n    YGOverflowScroll)\n\nYG_ENUM_DECL(\n    YGPositionType,\n    YGPositionTypeStatic,\n    YGPositionTypeRelative,\n    YGPositionTypeAbsolute)\n\nYG_ENUM_DECL(\n    YGUnit,\n    YGUnitUndefined,\n    YGUnitPoint,\n    YGUnitPercent,\n    YGUnitAuto,\n    YGUnitMaxContent,\n    YGUnitFitContent,\n    YGUnitStretch)\n\nYG_ENUM_DECL(\n    YGWrap,\n    YGWrapNoWrap,\n    YGWrapWrap,\n    YGWrapWrapReverse)\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGMacros.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#ifdef __cplusplus\n#include <type_traits>\n#endif\n\n#ifdef __cplusplus\n#define YG_EXTERN_C_BEGIN extern \"C\" {\n#define YG_EXTERN_C_END }\n#else\n#define YG_EXTERN_C_BEGIN\n#define YG_EXTERN_C_END\n#endif\n\n#if defined(__cplusplus)\n#define YG_DEPRECATED(message) [[deprecated(message)]]\n#elif defined(_MSC_VER)\n#define YG_DEPRECATED(message) __declspec(deprecated(message))\n#else\n#define YG_DEPRECATED(message) __attribute__((deprecated(message)))\n#endif\n\n#ifdef _WINDLL\n#define YG_EXPORT __declspec(dllexport)\n#elif defined(__EMSCRIPTEN__)\n#define YG_EXPORT __attribute__((visibility(\"default\"), used))\n#elif !defined(_MSC_VER)\n#define YG_EXPORT __attribute__((visibility(\"default\")))\n#else\n#define YG_EXPORT\n#endif\n\n#ifdef __OBJC__\n#if __has_include(<Foundation/Foundation.h>)\n#import <Foundation/Foundation.h>\n#endif\n#endif\n\n#ifdef NS_ENUM\n// Cannot use NSInteger as NSInteger has a different size than int (which is the\n// default type of a enum). Therefor when linking the Yoga C library into obj-c\n// the header is a mismatch for the Yoga ABI.\n#define YG_ENUM_BEGIN(name) NS_ENUM(int, name)\n#define YG_ENUM_END(name)\n#else\n#define YG_ENUM_BEGIN(name) enum name\n#define YG_ENUM_END(name) name\n#endif\n\n#ifdef __cplusplus\n#define YG_DEFINE_ENUM_FLAG_OPERATORS(name)                       \\\n  extern \"C++\" {                                                  \\\n  constexpr name operator~(name a) {                              \\\n    return static_cast<name>(                                     \\\n        ~static_cast<std::underlying_type<name>::type>(a));       \\\n  }                                                               \\\n  constexpr name operator|(name a, name b) {                      \\\n    return static_cast<name>(                                     \\\n        static_cast<std::underlying_type<name>::type>(a) |        \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  constexpr name operator&(name a, name b) {                      \\\n    return static_cast<name>(                                     \\\n        static_cast<std::underlying_type<name>::type>(a) &        \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  constexpr name operator^(name a, name b) {                      \\\n    return static_cast<name>(                                     \\\n        static_cast<std::underlying_type<name>::type>(a) ^        \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  inline name& operator|=(name& a, name b) {                      \\\n    return reinterpret_cast<name&>(                               \\\n        reinterpret_cast<std::underlying_type<name>::type&>(a) |= \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  inline name& operator&=(name& a, name b) {                      \\\n    return reinterpret_cast<name&>(                               \\\n        reinterpret_cast<std::underlying_type<name>::type&>(a) &= \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  inline name& operator^=(name& a, name b) {                      \\\n    return reinterpret_cast<name&>(                               \\\n        reinterpret_cast<std::underlying_type<name>::type&>(a) ^= \\\n        static_cast<std::underlying_type<name>::type>(b));        \\\n  }                                                               \\\n  }\n#else\n#define YG_DEFINE_ENUM_FLAG_OPERATORS(name)\n#endif\n\n#define YG_ENUM_DECL(NAME, ...)                               \\\n  typedef YG_ENUM_BEGIN(NAME){__VA_ARGS__} YG_ENUM_END(NAME); \\\n  YG_EXPORT const char* NAME##ToString(NAME);\n"
  },
  {
    "path": "yoga/YGNode.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/Cache.h>\n#include <yoga/algorithm/CalculateLayout.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/debug/Log.h>\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nYGNodeRef YGNodeNew(void) {\n  return YGNodeNewWithConfig(YGConfigGetDefault());\n}\n\nYGNodeRef YGNodeNewWithConfig(const YGConfigConstRef config) {\n  auto* node = new yoga::Node{resolveRef(config)};\n  yoga::assertFatal(\n      config != nullptr, \"Tried to construct YGNode with null config\");\n  Event::publish<Event::NodeAllocation>(node, {config});\n\n  return node;\n}\n\nYGNodeRef YGNodeClone(YGNodeConstRef oldNodeRef) {\n  auto oldNode = resolveRef(oldNodeRef);\n  const auto node = new yoga::Node(*oldNode);\n  Event::publish<Event::NodeAllocation>(node, {node->getConfig()});\n  node->setOwner(nullptr);\n  return node;\n}\n\nvoid YGNodeFree(const YGNodeRef nodeRef) {\n  const auto node = resolveRef(nodeRef);\n\n  if (auto owner = node->getOwner()) {\n    owner->removeChild(node);\n    node->setOwner(nullptr);\n  }\n\n  const size_t childCount = node->getChildCount();\n  for (size_t i = 0; i < childCount; i++) {\n    auto child = node->getChild(i);\n    child->setOwner(nullptr);\n  }\n\n  node->clearChildren();\n\n  Event::publish<Event::NodeDeallocation>(node, {YGNodeGetConfig(node)});\n  delete resolveRef(node);\n}\n\nvoid YGNodeFreeRecursive(YGNodeRef rootRef) {\n  const auto root = resolveRef(rootRef);\n\n  size_t skipped = 0;\n  while (root->getChildCount() > skipped) {\n    const auto child = root->getChild(skipped);\n    if (child->getOwner() != root) {\n      // Don't free shared nodes that we don't own.\n      skipped += 1;\n    } else {\n      YGNodeRemoveChild(root, child);\n      YGNodeFreeRecursive(child);\n    }\n  }\n  YGNodeFree(root);\n}\n\nvoid YGNodeFinalize(const YGNodeRef node) {\n  Event::publish<Event::NodeDeallocation>(node, {YGNodeGetConfig(node)});\n  delete resolveRef(node);\n}\n\nvoid YGNodeReset(YGNodeRef node) {\n  resolveRef(node)->reset();\n}\n\nvoid YGNodeCalculateLayout(\n    const YGNodeRef node,\n    const float ownerWidth,\n    const float ownerHeight,\n    const YGDirection ownerDirection) {\n  yoga::calculateLayout(\n      resolveRef(node), ownerWidth, ownerHeight, scopedEnum(ownerDirection));\n}\n\nbool YGNodeGetHasNewLayout(YGNodeConstRef node) {\n  return resolveRef(node)->getHasNewLayout();\n}\n\nvoid YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout) {\n  resolveRef(node)->setHasNewLayout(hasNewLayout);\n}\n\nbool YGNodeIsDirty(YGNodeConstRef node) {\n  return resolveRef(node)->isDirty();\n}\n\nvoid YGNodeMarkDirty(const YGNodeRef nodeRef) {\n  const auto node = resolveRef(nodeRef);\n\n  yoga::assertFatalWithNode(\n      node,\n      node->hasMeasureFunc(),\n      \"Only leaf nodes with custom measure functions \"\n      \"should manually mark themselves as dirty\");\n\n  node->markDirtyAndPropagate();\n}\n\nvoid YGNodeSetDirtiedFunc(YGNodeRef node, YGDirtiedFunc dirtiedFunc) {\n  resolveRef(node)->setDirtiedFunc(dirtiedFunc);\n}\n\nYGDirtiedFunc YGNodeGetDirtiedFunc(YGNodeConstRef node) {\n  return resolveRef(node)->getDirtiedFunc();\n}\n\nvoid YGNodeInsertChild(\n    const YGNodeRef ownerRef,\n    const YGNodeRef childRef,\n    const size_t index) {\n  auto owner = resolveRef(ownerRef);\n  auto child = resolveRef(childRef);\n\n  yoga::assertFatalWithNode(\n      owner,\n      child->getOwner() == nullptr,\n      \"Child already has a owner, it must be removed first.\");\n\n  yoga::assertFatalWithNode(\n      owner,\n      !owner->hasMeasureFunc(),\n      \"Cannot add child: Nodes with measure functions cannot have children.\");\n\n  owner->insertChild(child, index);\n  child->setOwner(owner);\n  owner->markDirtyAndPropagate();\n}\n\nvoid YGNodeSwapChild(\n    const YGNodeRef ownerRef,\n    const YGNodeRef childRef,\n    const size_t index) {\n  auto owner = resolveRef(ownerRef);\n  auto child = resolveRef(childRef);\n\n  owner->replaceChild(child, index);\n  child->setOwner(owner);\n}\n\nvoid YGNodeRemoveChild(\n    const YGNodeRef ownerRef,\n    const YGNodeRef excludedChildRef) {\n  auto owner = resolveRef(ownerRef);\n  auto excludedChild = resolveRef(excludedChildRef);\n\n  if (owner->getChildCount() == 0) {\n    // This is an empty set. Nothing to remove.\n    return;\n  }\n\n  // Children may be shared between parents, which is indicated by not having an\n  // owner. We only want to reset the child completely if it is owned\n  // exclusively by one node.\n  auto childOwner = excludedChild->getOwner();\n  if (owner->removeChild(excludedChild)) {\n    if (owner == childOwner) {\n      excludedChild->setLayout({}); // layout is no longer valid\n      excludedChild->setOwner(nullptr);\n      // Mark dirty to invalidate cache, but suppress the dirtied callback\n      // since the node is being detached from the tree and should not\n      // propagate dirty signals through external callback mechanisms.\n      auto dirtiedFunc = excludedChild->getDirtiedFunc();\n      excludedChild->setDirtiedFunc(nullptr);\n      excludedChild->setDirty(true);\n      excludedChild->setDirtiedFunc(dirtiedFunc);\n    }\n    owner->markDirtyAndPropagate();\n  }\n}\n\nvoid YGNodeRemoveAllChildren(const YGNodeRef ownerRef) {\n  auto owner = resolveRef(ownerRef);\n\n  const size_t childCount = owner->getChildCount();\n  if (childCount == 0) {\n    // This is an empty set already. Nothing to do.\n    return;\n  }\n  auto* firstChild = owner->getChild(0);\n  if (firstChild->getOwner() == owner) {\n    // If the first child has this node as its owner, we assume that this child\n    // set is unique.\n    for (size_t i = 0; i < childCount; i++) {\n      yoga::Node* oldChild = owner->getChild(i);\n      oldChild->setLayout({}); // layout is no longer valid\n      oldChild->setOwner(nullptr);\n      // Mark dirty to invalidate cache, but suppress the dirtied callback\n      // since the node is being detached from the tree and should not\n      // propagate dirty signals through external callback mechanisms.\n      auto dirtiedFunc = oldChild->getDirtiedFunc();\n      oldChild->setDirtiedFunc(nullptr);\n      oldChild->setDirty(true);\n      oldChild->setDirtiedFunc(dirtiedFunc);\n    }\n    owner->clearChildren();\n    owner->markDirtyAndPropagate();\n    return;\n  }\n  // Otherwise, we are not the owner of the child set. We don't have to do\n  // anything to clear it.\n  owner->setChildren({});\n  owner->markDirtyAndPropagate();\n}\n\nvoid YGNodeSetChildren(\n    const YGNodeRef ownerRef,\n    const YGNodeRef* childrenRefs,\n    const size_t count) {\n  auto owner = resolveRef(ownerRef);\n  auto children = reinterpret_cast<yoga::Node* const*>(childrenRefs);\n\n  if (owner == nullptr) {\n    return;\n  }\n\n  const std::vector<yoga::Node*> childrenVector = {children, children + count};\n  if (childrenVector.empty()) {\n    if (owner->getChildCount() > 0) {\n      for (auto* child : owner->getChildren()) {\n        child->setLayout({});\n        child->setOwner(nullptr);\n      }\n      owner->setChildren({});\n      owner->markDirtyAndPropagate();\n    }\n  } else {\n    if (owner->getChildCount() > 0) {\n      for (auto* oldChild : owner->getChildren()) {\n        // Our new children may have nodes in common with the old children. We\n        // don't reset these common nodes.\n        if (std::find(childrenVector.begin(), childrenVector.end(), oldChild) ==\n            childrenVector.end()) {\n          oldChild->setLayout({});\n          oldChild->setOwner(nullptr);\n        }\n      }\n    }\n    owner->setChildren(childrenVector);\n    for (yoga::Node* child : childrenVector) {\n      child->setOwner(owner);\n    }\n    owner->markDirtyAndPropagate();\n  }\n}\n\nYGNodeRef YGNodeGetChild(const YGNodeRef nodeRef, const size_t index) {\n  const auto node = resolveRef(nodeRef);\n\n  if (index < node->getChildren().size()) {\n    return node->getChild(index);\n  }\n  return nullptr;\n}\n\nsize_t YGNodeGetChildCount(const YGNodeConstRef node) {\n  return resolveRef(node)->getChildren().size();\n}\n\nYGNodeRef YGNodeGetOwner(const YGNodeRef node) {\n  return resolveRef(node)->getOwner();\n}\n\nYGNodeRef YGNodeGetParent(const YGNodeRef node) {\n  return resolveRef(node)->getOwner();\n}\n\nvoid YGNodeSetConfig(YGNodeRef node, YGConfigRef config) {\n  resolveRef(node)->setConfig(resolveRef(config));\n}\n\nYGConfigConstRef YGNodeGetConfig(YGNodeRef node) {\n  return resolveRef(node)->getConfig();\n}\n\nvoid YGNodeSetContext(YGNodeRef node, void* context) {\n  return resolveRef(node)->setContext(context);\n}\n\nvoid* YGNodeGetContext(YGNodeConstRef node) {\n  return resolveRef(node)->getContext();\n}\n\nvoid YGNodeSetMeasureFunc(YGNodeRef node, YGMeasureFunc measureFunc) {\n  resolveRef(node)->setMeasureFunc(measureFunc);\n}\n\nbool YGNodeHasMeasureFunc(YGNodeConstRef node) {\n  return resolveRef(node)->hasMeasureFunc();\n}\n\nvoid YGNodeSetBaselineFunc(YGNodeRef node, YGBaselineFunc baselineFunc) {\n  resolveRef(node)->setBaselineFunc(baselineFunc);\n}\n\nbool YGNodeHasBaselineFunc(YGNodeConstRef node) {\n  return resolveRef(node)->hasBaselineFunc();\n}\n\nvoid YGNodeSetIsReferenceBaseline(YGNodeRef nodeRef, bool isReferenceBaseline) {\n  const auto node = resolveRef(nodeRef);\n  if (node->isReferenceBaseline() != isReferenceBaseline) {\n    node->setIsReferenceBaseline(isReferenceBaseline);\n    node->markDirtyAndPropagate();\n  }\n}\n\nbool YGNodeIsReferenceBaseline(YGNodeConstRef node) {\n  return resolveRef(node)->isReferenceBaseline();\n}\n\nvoid YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType) {\n  return resolveRef(node)->setNodeType(scopedEnum(nodeType));\n}\n\nYGNodeType YGNodeGetNodeType(YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->getNodeType());\n}\n\nvoid YGNodeSetAlwaysFormsContainingBlock(\n    YGNodeRef node,\n    bool alwaysFormsContainingBlock) {\n  resolveRef(node)->setAlwaysFormsContainingBlock(alwaysFormsContainingBlock);\n}\n\nbool YGNodeGetAlwaysFormsContainingBlock(YGNodeConstRef node) {\n  return resolveRef(node)->alwaysFormsContainingBlock();\n}\n\n// TODO: This leaks internal details to the public API. Remove after removing\n// ComponentKit usage of it.\nbool YGNodeCanUseCachedMeasurement(\n    YGMeasureMode widthMode,\n    float availableWidth,\n    YGMeasureMode heightMode,\n    float availableHeight,\n    YGMeasureMode lastWidthMode,\n    float lastAvailableWidth,\n    YGMeasureMode lastHeightMode,\n    float lastAvailableHeight,\n    float lastComputedWidth,\n    float lastComputedHeight,\n    float marginRow,\n    float marginColumn,\n    YGConfigRef config) {\n  return yoga::canUseCachedMeasurement(\n      sizingMode(scopedEnum(widthMode)),\n      availableWidth,\n      sizingMode(scopedEnum(heightMode)),\n      availableHeight,\n      sizingMode(scopedEnum(lastWidthMode)),\n      lastAvailableWidth,\n      sizingMode(scopedEnum(lastHeightMode)),\n      lastAvailableHeight,\n      lastComputedWidth,\n      lastComputedHeight,\n      marginRow,\n      marginColumn,\n      resolveRef(config));\n}\n"
  },
  {
    "path": "yoga/YGNode.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdbool.h>\n#include <stddef.h>\n\n#include <yoga/YGConfig.h>\n#include <yoga/YGEnums.h>\n#include <yoga/YGMacros.h>\n\nYG_EXTERN_C_BEGIN\n\n/**\n * Handle to a mutable Yoga Node.\n */\ntypedef struct YGNode* YGNodeRef;\n\n/**\n * Handle to an immutable Yoga Node.\n */\ntypedef const struct YGNode* YGNodeConstRef;\n\n/**\n * Heap allocates and returns a new Yoga node using Yoga settings.\n */\nYG_EXPORT YGNodeRef YGNodeNew(void);\n\n/**\n * Heap allocates and returns a new Yoga node, with customized settings.\n */\nYG_EXPORT YGNodeRef YGNodeNewWithConfig(YGConfigConstRef config);\n\n/**\n * Returns a mutable copy of an existing node, with the same context and\n * children, but no owner set. Does not call the function set by\n * YGConfigSetCloneNodeFunc().\n */\nYG_EXPORT YGNodeRef YGNodeClone(YGNodeConstRef node);\n\n/**\n * Frees the Yoga node, disconnecting it from its owner and children.\n */\nYG_EXPORT void YGNodeFree(YGNodeRef node);\n\n/**\n * Frees the subtree of Yoga nodes rooted at the given node.\n */\nYG_EXPORT void YGNodeFreeRecursive(YGNodeRef node);\n\n/**\n * Frees the Yoga node without disconnecting it from its owner or children.\n * Allows garbage collecting Yoga nodes in parallel when the entire tree is\n * unreachable.\n */\nYG_EXPORT void YGNodeFinalize(YGNodeRef node);\n\n/**\n * Resets the node to its default state.\n */\nYG_EXPORT void YGNodeReset(YGNodeRef node);\n\n/**\n * Calculates the layout of the tree rooted at the given node.\n *\n * Layout results may be read after calling YGNodeCalculateLayout() using\n * functions like YGNodeLayoutGetLeft(), YGNodeLayoutGetTop(), etc.\n *\n * YGNodeGetHasNewLayout() may be read to know if the layout of the node or its\n * subtrees may have changed since the last time YGNodeCalculate() was called.\n */\nYG_EXPORT void YGNodeCalculateLayout(\n    YGNodeRef node,\n    float availableWidth,\n    float availableHeight,\n    YGDirection ownerDirection);\n\n/**\n * Whether the given node may have new layout results. Must be reset by calling\n * YGNodeSetHasNewLayout().\n */\nYG_EXPORT bool YGNodeGetHasNewLayout(YGNodeConstRef node);\n\n/**\n * Sets whether a nodes layout is considered new.\n */\nYG_EXPORT void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout);\n\n/**\n * Whether the node's layout results are dirty due to it or its children\n * changing.\n */\nYG_EXPORT bool YGNodeIsDirty(YGNodeConstRef node);\n\n/**\n * Marks a node with custom measure function as dirty.\n */\nYG_EXPORT void YGNodeMarkDirty(YGNodeRef node);\n\ntypedef void (*YGDirtiedFunc)(YGNodeConstRef node);\n\n/**\n * Called when a change is made to the Yoga tree which dirties this node.\n */\nYG_EXPORT void YGNodeSetDirtiedFunc(YGNodeRef node, YGDirtiedFunc dirtiedFunc);\n\n/**\n * Returns a dirtied func if set.\n */\nYG_EXPORT YGDirtiedFunc YGNodeGetDirtiedFunc(YGNodeConstRef node);\n\n/**\n * Inserts a child node at the given index.\n */\nYG_EXPORT void YGNodeInsertChild(YGNodeRef node, YGNodeRef child, size_t index);\n\n/**\n * Replaces the child node at a given index with a new one.\n */\nYG_EXPORT void YGNodeSwapChild(YGNodeRef node, YGNodeRef child, size_t index);\n\n/**\n * Removes the given child node.\n */\nYG_EXPORT void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child);\n\n/**\n * Removes all children nodes.\n */\nYG_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node);\n\n/**\n * Sets children according to the given list of nodes.\n */\nYG_EXPORT void\nYGNodeSetChildren(YGNodeRef owner, const YGNodeRef* children, size_t count);\n\n/**\n * Get the child node at a given index.\n */\nYG_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, size_t index);\n\n/**\n * The number of child nodes.\n */\nYG_EXPORT size_t YGNodeGetChildCount(YGNodeConstRef node);\n\n/**\n * Get the parent/owner currently set for a node.\n */\nYG_EXPORT YGNodeRef YGNodeGetOwner(YGNodeRef node);\n\n/**\n * Get the parent/owner currently set for a node.\n */\nYG_EXPORT YGNodeRef YGNodeGetParent(YGNodeRef node);\n\n/**\n * Set a new config for the node after creation.\n */\nYG_EXPORT void YGNodeSetConfig(YGNodeRef node, YGConfigRef config);\n\n/**\n * Get the config currently set on the node.\n */\nYG_EXPORT YGConfigConstRef YGNodeGetConfig(YGNodeRef node);\n\n/**\n * Sets extra data on the Yoga node which may be read from during callbacks.\n */\nYG_EXPORT void YGNodeSetContext(YGNodeRef node, void* context);\n\n/**\n * Returns the context or NULL if no context has been set.\n */\nYG_EXPORT void* YGNodeGetContext(YGNodeConstRef node);\n\ntypedef struct YGSize {\n  float width;\n  float height;\n} YGSize;\n\n/**\n * Returns the computed dimensions of the node, following the constraints of\n * `widthMode` and `heightMode`:\n *\n * YGMeasureModeUndefined: The parent has not imposed any constraint on the\n * child. It can be whatever size it wants.\n *\n * YGMeasureModeAtMost: The child can be as large as it wants up to the\n * specified size.\n *\n * YGMeasureModeExactly: The parent has determined an exact size for the\n * child. The child is going to be given those bounds regardless of how big it\n * wants to be.\n *\n * @returns the size of the leaf node, measured under the given constraints.\n */\ntypedef YGSize (*YGMeasureFunc)(\n    YGNodeConstRef node,\n    float width,\n    YGMeasureMode widthMode,\n    float height,\n    YGMeasureMode heightMode);\n\n/**\n * Allows providing custom measurements for a Yoga leaf node (usually for\n * measuring text). YGNodeMarkDirty() must be set if content effecting the\n * measurements of the node changes.\n */\nYG_EXPORT void YGNodeSetMeasureFunc(YGNodeRef node, YGMeasureFunc measureFunc);\n\n/**\n * Whether a measure function is set.\n */\nYG_EXPORT bool YGNodeHasMeasureFunc(YGNodeConstRef node);\n\n/**\n * @returns a defined offset to baseline (ascent).\n */\ntypedef float (*YGBaselineFunc)(YGNodeConstRef node, float width, float height);\n\n/**\n * Set a custom function for determining the text baseline for use in baseline\n * alignment.\n */\nYG_EXPORT void YGNodeSetBaselineFunc(\n    YGNodeRef node,\n    YGBaselineFunc baselineFunc);\n\n/**\n * Whether a baseline function is set.\n */\nYG_EXPORT bool YGNodeHasBaselineFunc(YGNodeConstRef node);\n\n/**\n * Sets this node should be considered the reference baseline among siblings.\n */\nYG_EXPORT void YGNodeSetIsReferenceBaseline(\n    YGNodeRef node,\n    bool isReferenceBaseline);\n\n/**\n * Whether this node is set as the reference baseline.\n */\nYG_EXPORT bool YGNodeIsReferenceBaseline(YGNodeConstRef node);\n\n/**\n * Sets whether a leaf node's layout results may be truncated during layout\n * rounding.\n */\nYG_EXPORT void YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType);\n\n/**\n * Wwhether a leaf node's layout results may be truncated during layout\n * rounding.\n */\nYG_EXPORT YGNodeType YGNodeGetNodeType(YGNodeConstRef node);\n\n/**\n * Make it so that this node will always form a containing block for any\n * descendant nodes. This is useful for when a node has a property outside of\n * of Yoga that will form a containing block. For example, transforms or some of\n * the others listed in\n * https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block\n */\nYG_EXPORT void YGNodeSetAlwaysFormsContainingBlock(\n    YGNodeRef node,\n    bool alwaysFormsContainingBlock);\n\n/**\n * Whether the node will always form a containing block for any descendant. This\n * can happen in situation where the client implements something like a\n * transform that can affect containing blocks but is not handled by Yoga\n * directly.\n */\nYG_EXPORT bool YGNodeGetAlwaysFormsContainingBlock(YGNodeConstRef node);\n\n/**\n * @deprecated\n */\nYG_DEPRECATED(\n    \"YGNodeCanUseCachedMeasurement may be removed in a future version of Yoga\")\nYG_EXPORT bool YGNodeCanUseCachedMeasurement(\n    YGMeasureMode widthMode,\n    float availableWidth,\n    YGMeasureMode heightMode,\n    float availableHeight,\n    YGMeasureMode lastWidthMode,\n    float lastAvailableWidth,\n    YGMeasureMode lastHeightMode,\n    float lastAvailableHeight,\n    float lastComputedWidth,\n    float lastComputedHeight,\n    float marginRow,\n    float marginColumn,\n    YGConfigRef config);\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGNodeLayout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/enums/Edge.h>\n#include <yoga/node/Node.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nnamespace {\n\ntemplate <auto LayoutMember>\nfloat getResolvedLayoutProperty(const YGNodeConstRef nodeRef, const Edge edge) {\n  const auto node = resolveRef(nodeRef);\n  yoga::assertFatalWithNode(\n      node,\n      edge <= Edge::End,\n      \"Cannot get layout properties of multi-edge shorthands\");\n\n  if (edge == Edge::Start) {\n    if (node->getLayout().direction() == Direction::RTL) {\n      return (node->getLayout().*LayoutMember)(PhysicalEdge::Right);\n    } else {\n      return (node->getLayout().*LayoutMember)(PhysicalEdge::Left);\n    }\n  }\n\n  if (edge == Edge::End) {\n    if (node->getLayout().direction() == Direction::RTL) {\n      return (node->getLayout().*LayoutMember)(PhysicalEdge::Left);\n    } else {\n      return (node->getLayout().*LayoutMember)(PhysicalEdge::Right);\n    }\n  }\n\n  return (node->getLayout().*LayoutMember)(static_cast<PhysicalEdge>(edge));\n}\n\n} // namespace\n\nfloat YGNodeLayoutGetLeft(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().position(PhysicalEdge::Left);\n}\n\nfloat YGNodeLayoutGetTop(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().position(PhysicalEdge::Top);\n}\n\nfloat YGNodeLayoutGetRight(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().position(PhysicalEdge::Right);\n}\n\nfloat YGNodeLayoutGetBottom(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().position(PhysicalEdge::Bottom);\n}\n\nfloat YGNodeLayoutGetWidth(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().dimension(Dimension::Width);\n}\n\nfloat YGNodeLayoutGetHeight(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().dimension(Dimension::Height);\n}\n\nYGDirection YGNodeLayoutGetDirection(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->getLayout().direction());\n}\n\nbool YGNodeLayoutGetHadOverflow(const YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().hadOverflow();\n}\n\nfloat YGNodeLayoutGetMargin(YGNodeConstRef node, YGEdge edge) {\n  return getResolvedLayoutProperty<&LayoutResults::margin>(\n      node, scopedEnum(edge));\n}\n\nfloat YGNodeLayoutGetBorder(YGNodeConstRef node, YGEdge edge) {\n  return getResolvedLayoutProperty<&LayoutResults::border>(\n      node, scopedEnum(edge));\n}\n\nfloat YGNodeLayoutGetPadding(YGNodeConstRef node, YGEdge edge) {\n  return getResolvedLayoutProperty<&LayoutResults::padding>(\n      node, scopedEnum(edge));\n}\n\nfloat YGNodeLayoutGetRawHeight(YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().rawDimension(Dimension::Height);\n}\n\nfloat YGNodeLayoutGetRawWidth(YGNodeConstRef node) {\n  return resolveRef(node)->getLayout().rawDimension(Dimension::Width);\n}\n"
  },
  {
    "path": "yoga/YGNodeLayout.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdbool.h>\n\n#include <yoga/YGConfig.h>\n#include <yoga/YGEnums.h>\n#include <yoga/YGMacros.h>\n\nYG_EXTERN_C_BEGIN\n\nYG_EXPORT float YGNodeLayoutGetLeft(YGNodeConstRef node);\nYG_EXPORT float YGNodeLayoutGetTop(YGNodeConstRef node);\nYG_EXPORT float YGNodeLayoutGetRight(YGNodeConstRef node);\nYG_EXPORT float YGNodeLayoutGetBottom(YGNodeConstRef node);\nYG_EXPORT float YGNodeLayoutGetWidth(YGNodeConstRef node);\nYG_EXPORT float YGNodeLayoutGetHeight(YGNodeConstRef node);\nYG_EXPORT YGDirection YGNodeLayoutGetDirection(YGNodeConstRef node);\nYG_EXPORT bool YGNodeLayoutGetHadOverflow(YGNodeConstRef node);\n\n// Get the computed values for these nodes after performing layout. If they were\n// set using point values then the returned value will be the same as\n// YGNodeStyleGetXXX. However if they were set using a percentage value then the\n// returned value is the computed value used during layout.\nYG_EXPORT float YGNodeLayoutGetMargin(YGNodeConstRef node, YGEdge edge);\nYG_EXPORT float YGNodeLayoutGetBorder(YGNodeConstRef node, YGEdge edge);\nYG_EXPORT float YGNodeLayoutGetPadding(YGNodeConstRef node, YGEdge edge);\n\n/**\n * Return the measured height of the node, before layout rounding\n */\nYG_EXPORT float YGNodeLayoutGetRawHeight(YGNodeConstRef node);\n\n/**\n * Return the measured width of the node, before layout rounding\n */\nYG_EXPORT float YGNodeLayoutGetRawWidth(YGNodeConstRef node);\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGNodeStyle.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/node/Node.h>\n#include <yoga/style/GridTrack.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nnamespace {\n\ntemplate <auto GetterT, auto SetterT, typename ValueT>\nvoid updateStyle(YGNodeRef node, ValueT value) {\n  auto& style = resolveRef(node)->style();\n  if ((style.*GetterT)() != value) {\n    (style.*SetterT)(value);\n    resolveRef(node)->markDirtyAndPropagate();\n  }\n}\n\ntemplate <auto GetterT, auto SetterT, typename IdxT, typename ValueT>\nvoid updateStyle(YGNodeRef node, IdxT idx, ValueT value) {\n  auto& style = resolveRef(node)->style();\n  if ((style.*GetterT)(idx) != value) {\n    (style.*SetterT)(idx, value);\n    resolveRef(node)->markDirtyAndPropagate();\n  }\n}\n\n} // namespace\n\nvoid YGNodeCopyStyle(YGNodeRef dstNode, YGNodeConstRef srcNode) {\n  auto dst = resolveRef(dstNode);\n  auto src = resolveRef(srcNode);\n\n  if (dst->style() != src->style()) {\n    dst->setStyle(src->style());\n    dst->markDirtyAndPropagate();\n  }\n}\n\nvoid YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) {\n  updateStyle<&Style::direction, &Style::setDirection>(node, scopedEnum(value));\n}\n\nYGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().direction());\n}\n\nvoid YGNodeStyleSetFlexDirection(\n    const YGNodeRef node,\n    const YGFlexDirection flexDirection) {\n  updateStyle<&Style::flexDirection, &Style::setFlexDirection>(\n      node, scopedEnum(flexDirection));\n}\n\nYGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().flexDirection());\n}\n\nvoid YGNodeStyleSetJustifyContent(\n    const YGNodeRef node,\n    const YGJustify justifyContent) {\n  updateStyle<&Style::justifyContent, &Style::setJustifyContent>(\n      node, scopedEnum(justifyContent));\n}\n\nYGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().justifyContent());\n}\n\nvoid YGNodeStyleSetJustifyItems(YGNodeRef node, const YGJustify justifyItems) {\n  updateStyle<&Style::justifyItems, &Style::setJustifyItems>(\n      node, scopedEnum(justifyItems));\n}\n\nYGJustify YGNodeStyleGetJustifyItems(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().justifyItems());\n}\n\nvoid YGNodeStyleSetJustifySelf(YGNodeRef node, const YGJustify justifySelf) {\n  updateStyle<&Style::justifySelf, &Style::setJustifySelf>(\n      node, scopedEnum(justifySelf));\n}\n\nYGJustify YGNodeStyleGetJustifySelf(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().justifySelf());\n}\n\nvoid YGNodeStyleSetAlignContent(\n    const YGNodeRef node,\n    const YGAlign alignContent) {\n  updateStyle<&Style::alignContent, &Style::setAlignContent>(\n      node, scopedEnum(alignContent));\n}\n\nYGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().alignContent());\n}\n\nvoid YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) {\n  updateStyle<&Style::alignItems, &Style::setAlignItems>(\n      node, scopedEnum(alignItems));\n}\n\nYGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().alignItems());\n}\n\nvoid YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) {\n  updateStyle<&Style::alignSelf, &Style::setAlignSelf>(\n      node, scopedEnum(alignSelf));\n}\n\nYGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().alignSelf());\n}\n\nvoid YGNodeStyleSetPositionType(\n    const YGNodeRef node,\n    const YGPositionType positionType) {\n  updateStyle<&Style::positionType, &Style::setPositionType>(\n      node, scopedEnum(positionType));\n}\n\nYGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().positionType());\n}\n\nvoid YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) {\n  updateStyle<&Style::flexWrap, &Style::setFlexWrap>(\n      node, scopedEnum(flexWrap));\n}\n\nYGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().flexWrap());\n}\n\nvoid YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) {\n  updateStyle<&Style::overflow, &Style::setOverflow>(\n      node, scopedEnum(overflow));\n}\n\nYGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().overflow());\n}\n\nvoid YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) {\n  updateStyle<&Style::display, &Style::setDisplay>(node, scopedEnum(display));\n}\n\nYGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().display());\n}\n\nvoid YGNodeStyleSetFlex(const YGNodeRef node, const float flex) {\n  updateStyle<&Style::flex, &Style::setFlex>(node, FloatOptional{flex});\n}\n\nfloat YGNodeStyleGetFlex(const YGNodeConstRef nodeRef) {\n  const auto node = resolveRef(nodeRef);\n  return node->style().flex().isUndefined() ? YGUndefined\n                                            : node->style().flex().unwrap();\n}\n\nvoid YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) {\n  updateStyle<&Style::flexGrow, &Style::setFlexGrow>(\n      node, FloatOptional{flexGrow});\n}\n\nfloat YGNodeStyleGetFlexGrow(const YGNodeConstRef nodeRef) {\n  const auto node = resolveRef(nodeRef);\n  return node->style().flexGrow().isUndefined()\n      ? Style::DefaultFlexGrow\n      : node->style().flexGrow().unwrap();\n}\n\nvoid YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) {\n  updateStyle<&Style::flexShrink, &Style::setFlexShrink>(\n      node, FloatOptional{flexShrink});\n}\n\nfloat YGNodeStyleGetFlexShrink(const YGNodeConstRef nodeRef) {\n  const auto node = resolveRef(nodeRef);\n  return node->style().flexShrink().isUndefined()\n      ? (node->getConfig()->useWebDefaults() ? Style::WebDefaultFlexShrink\n                                             : Style::DefaultFlexShrink)\n      : node->style().flexShrink().unwrap();\n}\n\nvoid YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::points(flexBasis));\n}\n\nvoid YGNodeStyleSetFlexBasisPercent(\n    const YGNodeRef node,\n    const float flexBasisPercent) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::percent(flexBasisPercent));\n}\n\nvoid YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::ofAuto());\n}\n\nvoid YGNodeStyleSetFlexBasisMaxContent(const YGNodeRef node) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetFlexBasisFitContent(const YGNodeRef node) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetFlexBasisStretch(const YGNodeRef node) {\n  updateStyle<&Style::flexBasis, &Style::setFlexBasis>(\n      node, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().flexBasis();\n}\n\nvoid YGNodeStyleSetPosition(YGNodeRef node, YGEdge edge, float points) {\n  updateStyle<&Style::position, &Style::setPosition>(\n      node, scopedEnum(edge), StyleLength::points(points));\n}\n\nvoid YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) {\n  updateStyle<&Style::position, &Style::setPosition>(\n      node, scopedEnum(edge), StyleLength::percent(percent));\n}\n\nvoid YGNodeStyleSetPositionAuto(YGNodeRef node, YGEdge edge) {\n  updateStyle<&Style::position, &Style::setPosition>(\n      node, scopedEnum(edge), StyleLength::ofAuto());\n}\n\nYGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) {\n  return (YGValue)resolveRef(node)->style().position(scopedEnum(edge));\n}\n\nvoid YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) {\n  updateStyle<&Style::margin, &Style::setMargin>(\n      node, scopedEnum(edge), StyleLength::points(points));\n}\n\nvoid YGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float percent) {\n  updateStyle<&Style::margin, &Style::setMargin>(\n      node, scopedEnum(edge), StyleLength::percent(percent));\n}\n\nvoid YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) {\n  updateStyle<&Style::margin, &Style::setMargin>(\n      node, scopedEnum(edge), StyleLength::ofAuto());\n}\n\nYGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) {\n  return (YGValue)resolveRef(node)->style().margin(scopedEnum(edge));\n}\n\nvoid YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) {\n  updateStyle<&Style::padding, &Style::setPadding>(\n      node, scopedEnum(edge), StyleLength::points(points));\n}\n\nvoid YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) {\n  updateStyle<&Style::padding, &Style::setPadding>(\n      node, scopedEnum(edge), StyleLength::percent(percent));\n}\n\nYGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) {\n  return (YGValue)resolveRef(node)->style().padding(scopedEnum(edge));\n}\n\nvoid YGNodeStyleSetBorder(\n    const YGNodeRef node,\n    const YGEdge edge,\n    const float border) {\n  updateStyle<&Style::border, &Style::setBorder>(\n      node, scopedEnum(edge), StyleLength::points(border));\n}\n\nfloat YGNodeStyleGetBorder(const YGNodeConstRef node, const YGEdge edge) {\n  auto border = resolveRef(node)->style().border(scopedEnum(edge));\n  if (border.isUndefined() || border.isAuto()) {\n    return YGUndefined;\n  }\n\n  return static_cast<YGValue>(border).value;\n}\n\nvoid YGNodeStyleSetGap(\n    const YGNodeRef node,\n    const YGGutter gutter,\n    const float gapLength) {\n  updateStyle<&Style::gap, &Style::setGap>(\n      node, scopedEnum(gutter), StyleLength::points(gapLength));\n}\n\nvoid YGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float percent) {\n  updateStyle<&Style::gap, &Style::setGap>(\n      node, scopedEnum(gutter), StyleLength::percent(percent));\n}\n\nYGValue YGNodeStyleGetGap(const YGNodeConstRef node, const YGGutter gutter) {\n  return (YGValue)resolveRef(node)->style().gap(scopedEnum(gutter));\n}\n\nvoid YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) {\n  updateStyle<&Style::aspectRatio, &Style::setAspectRatio>(\n      node, FloatOptional{aspectRatio});\n}\n\nfloat YGNodeStyleGetAspectRatio(const YGNodeConstRef node) {\n  const FloatOptional op = resolveRef(node)->style().aspectRatio();\n  return op.isUndefined() ? YGUndefined : op.unwrap();\n}\n\nvoid YGNodeStyleSetBoxSizing(YGNodeRef node, YGBoxSizing boxSizing) {\n  updateStyle<&Style::boxSizing, &Style::setBoxSizing>(\n      node, scopedEnum(boxSizing));\n}\n\nYGBoxSizing YGNodeStyleGetBoxSizing(const YGNodeConstRef node) {\n  return unscopedEnum(resolveRef(node)->style().boxSizing());\n}\n\nvoid YGNodeStyleSetWidth(YGNodeRef node, float points) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::points(points));\n}\n\nvoid YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::percent(percent));\n}\n\nvoid YGNodeStyleSetWidthAuto(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::ofAuto());\n}\n\nvoid YGNodeStyleSetWidthMaxContent(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetWidthFitContent(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetWidthStretch(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Width, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetWidth(YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().dimension(Dimension::Width);\n}\n\nvoid YGNodeStyleSetHeight(YGNodeRef node, float points) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::points(points));\n}\n\nvoid YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::percent(percent));\n}\n\nvoid YGNodeStyleSetHeightAuto(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::ofAuto());\n}\n\nvoid YGNodeStyleSetHeightMaxContent(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetHeightFitContent(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetHeightStretch(YGNodeRef node) {\n  updateStyle<&Style::dimension, &Style::setDimension>(\n      node, Dimension::Height, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetHeight(YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().dimension(Dimension::Height);\n}\n\nvoid YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Width, StyleSizeLength::points(minWidth));\n}\n\nvoid YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Width, StyleSizeLength::percent(minWidth));\n}\n\nvoid YGNodeStyleSetMinWidthMaxContent(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Width, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetMinWidthFitContent(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Width, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetMinWidthStretch(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Width, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().minDimension(Dimension::Width);\n}\n\nvoid YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Height, StyleSizeLength::points(minHeight));\n}\n\nvoid YGNodeStyleSetMinHeightPercent(\n    const YGNodeRef node,\n    const float minHeight) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Height, StyleSizeLength::percent(minHeight));\n}\n\nvoid YGNodeStyleSetMinHeightMaxContent(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Height, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetMinHeightFitContent(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Height, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetMinHeightStretch(const YGNodeRef node) {\n  updateStyle<&Style::minDimension, &Style::setMinDimension>(\n      node, Dimension::Height, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().minDimension(Dimension::Height);\n}\n\nvoid YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Width, StyleSizeLength::points(maxWidth));\n}\n\nvoid YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Width, StyleSizeLength::percent(maxWidth));\n}\n\nvoid YGNodeStyleSetMaxWidthMaxContent(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Width, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetMaxWidthFitContent(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Width, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetMaxWidthStretch(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Width, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().maxDimension(Dimension::Width);\n}\n\nvoid YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Height, StyleSizeLength::points(maxHeight));\n}\n\nvoid YGNodeStyleSetMaxHeightPercent(\n    const YGNodeRef node,\n    const float maxHeight) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Height, StyleSizeLength::percent(maxHeight));\n}\n\nvoid YGNodeStyleSetMaxHeightMaxContent(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Height, StyleSizeLength::ofMaxContent());\n}\n\nvoid YGNodeStyleSetMaxHeightFitContent(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Height, StyleSizeLength::ofFitContent());\n}\n\nvoid YGNodeStyleSetMaxHeightStretch(const YGNodeRef node) {\n  updateStyle<&Style::maxDimension, &Style::setMaxDimension>(\n      node, Dimension::Height, StyleSizeLength::ofStretch());\n}\n\nYGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) {\n  return (YGValue)resolveRef(node)->style().maxDimension(Dimension::Height);\n}\n\n// Grid Item Placement Properties\n\nvoid YGNodeStyleSetGridColumnStart(YGNodeRef node, int32_t gridColumnStart) {\n  updateStyle<&Style::gridColumnStart, &Style::setGridColumnStart>(\n      node, GridLine::fromInteger(gridColumnStart));\n}\n\nvoid YGNodeStyleSetGridColumnStartAuto(YGNodeRef node) {\n  updateStyle<&Style::gridColumnStart, &Style::setGridColumnStart>(\n      node, GridLine::auto_());\n}\n\nvoid YGNodeStyleSetGridColumnStartSpan(YGNodeRef node, int32_t span) {\n  updateStyle<&Style::gridColumnStart, &Style::setGridColumnStart>(\n      node, GridLine::span(span));\n}\n\nint32_t YGNodeStyleGetGridColumnStart(YGNodeConstRef node) {\n  const auto& gridLine = resolveRef(node)->style().gridColumnStart();\n  return gridLine.isInteger() ? gridLine.integer : 0;\n}\n\nvoid YGNodeStyleSetGridColumnEnd(YGNodeRef node, int32_t gridColumnEnd) {\n  updateStyle<&Style::gridColumnEnd, &Style::setGridColumnEnd>(\n      node, GridLine::fromInteger(gridColumnEnd));\n}\n\nvoid YGNodeStyleSetGridColumnEndAuto(YGNodeRef node) {\n  updateStyle<&Style::gridColumnEnd, &Style::setGridColumnEnd>(\n      node, GridLine::auto_());\n}\n\nvoid YGNodeStyleSetGridColumnEndSpan(YGNodeRef node, int32_t span) {\n  updateStyle<&Style::gridColumnEnd, &Style::setGridColumnEnd>(\n      node, GridLine::span(span));\n}\n\nint32_t YGNodeStyleGetGridColumnEnd(YGNodeConstRef node) {\n  const auto& gridLine = resolveRef(node)->style().gridColumnEnd();\n  return gridLine.isInteger() ? gridLine.integer : 0;\n}\n\nvoid YGNodeStyleSetGridRowStart(YGNodeRef node, int32_t gridRowStart) {\n  updateStyle<&Style::gridRowStart, &Style::setGridRowStart>(\n      node, GridLine::fromInteger(gridRowStart));\n}\n\nvoid YGNodeStyleSetGridRowStartAuto(YGNodeRef node) {\n  updateStyle<&Style::gridRowStart, &Style::setGridRowStart>(\n      node, GridLine::auto_());\n}\n\nvoid YGNodeStyleSetGridRowStartSpan(YGNodeRef node, int32_t span) {\n  updateStyle<&Style::gridRowStart, &Style::setGridRowStart>(\n      node, GridLine::span(span));\n}\n\nint32_t YGNodeStyleGetGridRowStart(YGNodeConstRef node) {\n  const auto& gridLine = resolveRef(node)->style().gridRowStart();\n  return gridLine.isInteger() ? gridLine.integer : 0;\n}\n\nvoid YGNodeStyleSetGridRowEnd(YGNodeRef node, int32_t gridRowEnd) {\n  updateStyle<&Style::gridRowEnd, &Style::setGridRowEnd>(\n      node, GridLine::fromInteger(gridRowEnd));\n}\n\nvoid YGNodeStyleSetGridRowEndAuto(YGNodeRef node) {\n  updateStyle<&Style::gridRowEnd, &Style::setGridRowEnd>(\n      node, GridLine::auto_());\n}\n\nvoid YGNodeStyleSetGridRowEndSpan(YGNodeRef node, int32_t span) {\n  updateStyle<&Style::gridRowEnd, &Style::setGridRowEnd>(\n      node, GridLine::span(span));\n}\n\nint32_t YGNodeStyleGetGridRowEnd(YGNodeConstRef node) {\n  const auto& gridLine = resolveRef(node)->style().gridRowEnd();\n  return gridLine.isInteger() ? gridLine.integer : 0;\n}\n\n// Grid Container Properties\n\nnamespace {\n\nGridTrackSize gridTrackSizeFromTypeAndValue(YGGridTrackType type, float value) {\n  switch (type) {\n    case YGGridTrackTypePoints:\n      return GridTrackSize::length(value);\n    case YGGridTrackTypePercent:\n      return GridTrackSize::percent(value);\n    case YGGridTrackTypeFr:\n      return GridTrackSize::fr(value);\n    case YGGridTrackTypeAuto:\n      return GridTrackSize::auto_();\n    case YGGridTrackTypeMinmax:\n      return GridTrackSize::auto_();\n  }\n  fatalWithMessage(\"Unknown YGGridTrackType\");\n}\n\nStyleSizeLength styleSizeLengthFromTypeAndValue(\n    YGGridTrackType type,\n    float value) {\n  switch (type) {\n    case YGGridTrackTypePoints:\n      return StyleSizeLength::points(value);\n    case YGGridTrackTypePercent:\n      return StyleSizeLength::percent(value);\n    case YGGridTrackTypeFr:\n      return StyleSizeLength::stretch(value);\n    case YGGridTrackTypeAuto:\n      return StyleSizeLength::ofAuto();\n    case YGGridTrackTypeMinmax:\n      return StyleSizeLength::ofAuto();\n  }\n  fatalWithMessage(\"Unknown YGGridTrackType\");\n}\n\n} // namespace\n\n// GridTemplateColumns\n\nvoid YGNodeStyleSetGridTemplateColumnsCount(YGNodeRef node, size_t count) {\n  resolveRef(node)->style().resizeGridTemplateColumns(count);\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridTemplateColumn(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value) {\n  resolveRef(node)->style().setGridTemplateColumnAt(\n      index, gridTrackSizeFromTypeAndValue(type, value));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridTemplateColumnMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue) {\n  resolveRef(node)->style().setGridTemplateColumnAt(\n      index,\n      GridTrackSize::minmax(\n          styleSizeLengthFromTypeAndValue(minType, minValue),\n          styleSizeLengthFromTypeAndValue(maxType, maxValue)));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\n// GridTemplateRows\n\nvoid YGNodeStyleSetGridTemplateRowsCount(YGNodeRef node, size_t count) {\n  resolveRef(node)->style().resizeGridTemplateRows(count);\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridTemplateRow(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value) {\n  resolveRef(node)->style().setGridTemplateRowAt(\n      index, gridTrackSizeFromTypeAndValue(type, value));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridTemplateRowMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue) {\n  resolveRef(node)->style().setGridTemplateRowAt(\n      index,\n      GridTrackSize::minmax(\n          styleSizeLengthFromTypeAndValue(minType, minValue),\n          styleSizeLengthFromTypeAndValue(maxType, maxValue)));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\n// GridAutoColumns\n\nvoid YGNodeStyleSetGridAutoColumnsCount(YGNodeRef node, size_t count) {\n  resolveRef(node)->style().resizeGridAutoColumns(count);\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridAutoColumn(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value) {\n  resolveRef(node)->style().setGridAutoColumnAt(\n      index, gridTrackSizeFromTypeAndValue(type, value));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridAutoColumnMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue) {\n  resolveRef(node)->style().setGridAutoColumnAt(\n      index,\n      GridTrackSize::minmax(\n          styleSizeLengthFromTypeAndValue(minType, minValue),\n          styleSizeLengthFromTypeAndValue(maxType, maxValue)));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\n// GridAutoRows\n\nvoid YGNodeStyleSetGridAutoRowsCount(YGNodeRef node, size_t count) {\n  resolveRef(node)->style().resizeGridAutoRows(count);\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridAutoRow(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value) {\n  resolveRef(node)->style().setGridAutoRowAt(\n      index, gridTrackSizeFromTypeAndValue(type, value));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n\nvoid YGNodeStyleSetGridAutoRowMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue) {\n  resolveRef(node)->style().setGridAutoRowAt(\n      index,\n      GridTrackSize::minmax(\n          styleSizeLengthFromTypeAndValue(minType, minValue),\n          styleSizeLengthFromTypeAndValue(maxType, maxValue)));\n  resolveRef(node)->markDirtyAndPropagate();\n}\n"
  },
  {
    "path": "yoga/YGNodeStyle.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stddef.h>\n#include <yoga/YGEnums.h>\n#include <yoga/YGNode.h>\n#include <yoga/YGValue.h>\n\nYG_EXTERN_C_BEGIN\n\nYG_EXPORT void YGNodeCopyStyle(YGNodeRef dstNode, YGNodeConstRef srcNode);\n\nYG_EXPORT void YGNodeStyleSetDirection(YGNodeRef node, YGDirection direction);\nYG_EXPORT YGDirection YGNodeStyleGetDirection(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlexDirection(\n    YGNodeRef node,\n    YGFlexDirection flexDirection);\nYG_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetJustifyContent(\n    YGNodeRef node,\n    YGJustify justifyContent);\nYG_EXPORT YGJustify YGNodeStyleGetJustifyContent(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetJustifyItems(\n    YGNodeRef node,\n    YGJustify justifyItems);\nYG_EXPORT YGJustify YGNodeStyleGetJustifyItems(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetJustifySelf(YGNodeRef node, YGJustify justifySelf);\nYG_EXPORT YGJustify YGNodeStyleGetJustifySelf(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetAlignContent(YGNodeRef node, YGAlign alignContent);\nYG_EXPORT YGAlign YGNodeStyleGetAlignContent(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetAlignItems(YGNodeRef node, YGAlign alignItems);\nYG_EXPORT YGAlign YGNodeStyleGetAlignItems(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetAlignSelf(YGNodeRef node, YGAlign alignSelf);\nYG_EXPORT YGAlign YGNodeStyleGetAlignSelf(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetPositionType(\n    YGNodeRef node,\n    YGPositionType positionType);\nYG_EXPORT YGPositionType YGNodeStyleGetPositionType(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlexWrap(YGNodeRef node, YGWrap flexWrap);\nYG_EXPORT YGWrap YGNodeStyleGetFlexWrap(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetOverflow(YGNodeRef node, YGOverflow overflow);\nYG_EXPORT YGOverflow YGNodeStyleGetOverflow(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetDisplay(YGNodeRef node, YGDisplay display);\nYG_EXPORT YGDisplay YGNodeStyleGetDisplay(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlex(YGNodeRef node, float flex);\nYG_EXPORT float YGNodeStyleGetFlex(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlexGrow(YGNodeRef node, float flexGrow);\nYG_EXPORT float YGNodeStyleGetFlexGrow(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlexShrink(YGNodeRef node, float flexShrink);\nYG_EXPORT float YGNodeStyleGetFlexShrink(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetFlexBasis(YGNodeRef node, float flexBasis);\nYG_EXPORT void YGNodeStyleSetFlexBasisPercent(YGNodeRef node, float flexBasis);\nYG_EXPORT void YGNodeStyleSetFlexBasisAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetFlexBasisMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetFlexBasisFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetFlexBasisStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetFlexBasis(YGNodeConstRef node);\n\nYG_EXPORT void\nYGNodeStyleSetPosition(YGNodeRef node, YGEdge edge, float position);\nYG_EXPORT void\nYGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float position);\nYG_EXPORT YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge);\nYG_EXPORT void YGNodeStyleSetPositionAuto(YGNodeRef node, YGEdge edge);\n\nYG_EXPORT\nvoid YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float margin);\nYG_EXPORT void\nYGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float margin);\nYG_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge);\nYG_EXPORT YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge);\n\nYG_EXPORT void\nYGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float padding);\nYG_EXPORT void\nYGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float padding);\nYG_EXPORT YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge);\n\nYG_EXPORT void YGNodeStyleSetBorder(YGNodeRef node, YGEdge edge, float border);\nYG_EXPORT float YGNodeStyleGetBorder(YGNodeConstRef node, YGEdge edge);\n\nYG_EXPORT void\nYGNodeStyleSetGap(YGNodeRef node, YGGutter gutter, float gapLength);\nYG_EXPORT void\nYGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float gapLength);\nYG_EXPORT YGValue YGNodeStyleGetGap(YGNodeConstRef node, YGGutter gutter);\n\nYG_EXPORT void YGNodeStyleSetBoxSizing(YGNodeRef node, YGBoxSizing boxSizing);\nYG_EXPORT YGBoxSizing YGNodeStyleGetBoxSizing(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float width);\nYG_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float width);\nYG_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetWidthMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetWidthFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetWidthStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetWidth(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float height);\nYG_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float height);\nYG_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetHeightMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetHeightFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetHeightStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetMinWidth(YGNodeRef node, float minWidth);\nYG_EXPORT void YGNodeStyleSetMinWidthPercent(YGNodeRef node, float minWidth);\nYG_EXPORT void YGNodeStyleSetMinWidthMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMinWidthFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMinWidthStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetMinWidth(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetMinHeight(YGNodeRef node, float minHeight);\nYG_EXPORT void YGNodeStyleSetMinHeightPercent(YGNodeRef node, float minHeight);\nYG_EXPORT void YGNodeStyleSetMinHeightMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMinHeightFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMinHeightStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetMinHeight(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetMaxWidth(YGNodeRef node, float maxWidth);\nYG_EXPORT void YGNodeStyleSetMaxWidthPercent(YGNodeRef node, float maxWidth);\nYG_EXPORT void YGNodeStyleSetMaxWidthMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMaxWidthFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMaxWidthStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetMaxWidth(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetMaxHeight(YGNodeRef node, float maxHeight);\nYG_EXPORT void YGNodeStyleSetMaxHeightPercent(YGNodeRef node, float maxHeight);\nYG_EXPORT void YGNodeStyleSetMaxHeightMaxContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMaxHeightFitContent(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetMaxHeightStretch(YGNodeRef node);\nYG_EXPORT YGValue YGNodeStyleGetMaxHeight(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetAspectRatio(YGNodeRef node, float aspectRatio);\nYG_EXPORT float YGNodeStyleGetAspectRatio(YGNodeConstRef node);\n\n// Grid Item Properties\nYG_EXPORT void YGNodeStyleSetGridColumnStart(\n    YGNodeRef node,\n    int gridColumnStart);\nYG_EXPORT void YGNodeStyleSetGridColumnStartAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetGridColumnStartSpan(YGNodeRef node, int span);\nYG_EXPORT int YGNodeStyleGetGridColumnStart(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetGridColumnEnd(YGNodeRef node, int gridColumnEnd);\nYG_EXPORT void YGNodeStyleSetGridColumnEndAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetGridColumnEndSpan(YGNodeRef node, int span);\nYG_EXPORT int YGNodeStyleGetGridColumnEnd(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetGridRowStart(YGNodeRef node, int gridRowStart);\nYG_EXPORT void YGNodeStyleSetGridRowStartAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetGridRowStartSpan(YGNodeRef node, int span);\nYG_EXPORT int YGNodeStyleGetGridRowStart(YGNodeConstRef node);\n\nYG_EXPORT void YGNodeStyleSetGridRowEnd(YGNodeRef node, int gridRowEnd);\nYG_EXPORT void YGNodeStyleSetGridRowEndAuto(YGNodeRef node);\nYG_EXPORT void YGNodeStyleSetGridRowEndSpan(YGNodeRef node, int span);\nYG_EXPORT int YGNodeStyleGetGridRowEnd(YGNodeConstRef node);\n\n// Grid Container Properties\nYG_EXPORT void YGNodeStyleSetGridTemplateColumnsCount(\n    YGNodeRef node,\n    size_t count);\nYG_EXPORT void YGNodeStyleSetGridTemplateColumn(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value);\nYG_EXPORT void YGNodeStyleSetGridTemplateColumnMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue);\n\nYG_EXPORT void YGNodeStyleSetGridTemplateRowsCount(\n    YGNodeRef node,\n    size_t count);\nYG_EXPORT void YGNodeStyleSetGridTemplateRow(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value);\nYG_EXPORT void YGNodeStyleSetGridTemplateRowMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue);\n\nYG_EXPORT void YGNodeStyleSetGridAutoColumnsCount(YGNodeRef node, size_t count);\nYG_EXPORT void YGNodeStyleSetGridAutoColumn(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value);\nYG_EXPORT void YGNodeStyleSetGridAutoColumnMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue);\n\nYG_EXPORT void YGNodeStyleSetGridAutoRowsCount(YGNodeRef node, size_t count);\nYG_EXPORT void YGNodeStyleSetGridAutoRow(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType type,\n    float value);\nYG_EXPORT void YGNodeStyleSetGridAutoRowMinMax(\n    YGNodeRef node,\n    size_t index,\n    YGGridTrackType minType,\n    float minValue,\n    YGGridTrackType maxType,\n    float maxValue);\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGPixelGrid.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/PixelGrid.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nfloat YGRoundValueToPixelGrid(\n    const double value,\n    const double pointScaleFactor,\n    const bool forceCeil,\n    const bool forceFloor) {\n  return yoga::roundValueToPixelGrid(\n      value, pointScaleFactor, forceCeil, forceFloor);\n}\n"
  },
  {
    "path": "yoga/YGPixelGrid.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdbool.h>\n\n#include <yoga/YGConfig.h>\n#include <yoga/YGEnums.h>\n#include <yoga/YGMacros.h>\n\nYG_EXTERN_C_BEGIN\n\n/**\n * Rounds a point value to the nearest whole pixel, given a pointScaleFactor\n * describing pixel density.\n * @returns the rounded value in points\n */\nYG_EXPORT float YGRoundValueToPixelGrid(\n    double value,\n    double pointScaleFactor,\n    bool forceCeil,\n    bool forceFloor);\n\nYG_EXTERN_C_END\n"
  },
  {
    "path": "yoga/YGValue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/YGValue.h>\n#include <yoga/numeric/Comparison.h>\n\nusing namespace facebook;\nusing namespace facebook::yoga;\n\nconst YGValue YGValueZero = {0, YGUnitPoint};\nconst YGValue YGValueUndefined = {YGUndefined, YGUnitUndefined};\nconst YGValue YGValueAuto = {YGUndefined, YGUnitAuto};\n\nbool YGFloatIsUndefined(const float value) {\n  return yoga::isUndefined(value);\n}\n"
  },
  {
    "path": "yoga/YGValue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdbool.h>\n\n#include <yoga/YGEnums.h>\n#include <yoga/YGMacros.h>\n\n/**\n * Float value to represent \"undefined\" in style values.\n */\n#ifdef __cplusplus\n#include <limits>\nconstexpr float YGUndefined = std::numeric_limits<float>::quiet_NaN();\n#else\n#include <math.h>\n#define YGUndefined NAN\n#endif\n\nYG_EXTERN_C_BEGIN\n\n/**\n * Structure used to represent a dimension in a style.\n */\ntypedef struct YGValue {\n  float value;\n  YGUnit unit;\n} YGValue;\n\n/**\n * Constant for a dimension of \"auto\".\n */\nYG_EXPORT extern const YGValue YGValueAuto;\n\n/**\n * Constant for a dimension which is not defined.\n */\nYG_EXPORT extern const YGValue YGValueUndefined;\n\n/**\n * Constant for a dimension that is zero-length.\n */\nYG_EXPORT extern const YGValue YGValueZero;\n\n/**\n * Whether a dimension represented as a float is defined.\n */\nYG_EXPORT bool YGFloatIsUndefined(float value);\n\nYG_EXTERN_C_END\n\n// Equality operators for comparison of YGValue in C++\n#ifdef __cplusplus\ninline bool operator==(const YGValue& lhs, const YGValue& rhs) {\n  if (lhs.unit != rhs.unit) {\n    return false;\n  }\n\n  switch (lhs.unit) {\n    case YGUnitUndefined:\n    case YGUnitAuto:\n    case YGUnitFitContent:\n    case YGUnitMaxContent:\n    case YGUnitStretch:\n      return true;\n    case YGUnitPoint:\n    case YGUnitPercent:\n      return lhs.value == rhs.value;\n    default:\n      return false;\n  }\n}\n\ninline YGValue operator-(const YGValue& value) {\n  return {-value.value, value.unit};\n}\n#endif\n"
  },
  {
    "path": "yoga/Yoga.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n/**\n * `#include <yoga/Yoga.h>` includes all of Yoga's public headers.\n */\n\n#include <yoga/YGConfig.h> // IWYU pragma: export\n#include <yoga/YGEnums.h> // IWYU pragma: export\n#include <yoga/YGMacros.h> // IWYU pragma: export\n#include <yoga/YGNode.h> // IWYU pragma: export\n#include <yoga/YGNodeLayout.h> // IWYU pragma: export\n#include <yoga/YGNodeStyle.h> // IWYU pragma: export\n#include <yoga/YGPixelGrid.h> // IWYU pragma: export\n#include <yoga/YGValue.h> // IWYU pragma: export\n"
  },
  {
    "path": "yoga/algorithm/AbsoluteLayout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/algorithm/AbsoluteLayout.h>\n#include <yoga/algorithm/Align.h>\n#include <yoga/algorithm/BoundAxis.h>\n#include <yoga/algorithm/CalculateLayout.h>\n#include <yoga/algorithm/TrailingPosition.h>\n\nnamespace facebook::yoga {\n\nstatic inline void setFlexStartLayoutPosition(\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection axis,\n    const float containingBlockWidth) {\n  float position = child->style().computeFlexStartMargin(\n                       axis, direction, containingBlockWidth) +\n      parent->getLayout().border(flexStartEdge(axis));\n\n  // https://www.w3.org/TR/css-grid-1/#abspos\n  // absolute positioned grid items are positioned relative to the padding edge\n  // of the grid container\n  if (!child->hasErrata(Errata::AbsolutePositionWithoutInsetsExcludesPadding) &&\n      parent->style().display() != Display::Grid) {\n    position += parent->getLayout().padding(flexStartEdge(axis));\n  }\n\n  child->setLayoutPosition(position, flexStartEdge(axis));\n}\n\nstatic inline void setFlexEndLayoutPosition(\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection axis,\n    const float containingBlockWidth) {\n  float flexEndPosition = parent->getLayout().border(flexEndEdge(axis)) +\n      child->style().computeFlexEndMargin(\n          axis, direction, containingBlockWidth);\n\n  // https://www.w3.org/TR/css-grid-1/#abspos\n  // absolute positioned grid items are positioned relative to the padding edge\n  // of the grid container\n  if (!child->hasErrata(Errata::AbsolutePositionWithoutInsetsExcludesPadding) &&\n      parent->style().display() != Display::Grid) {\n    flexEndPosition += parent->getLayout().padding(flexEndEdge(axis));\n  }\n\n  child->setLayoutPosition(\n      getPositionOfOppositeEdge(flexEndPosition, axis, parent, child),\n      flexStartEdge(axis));\n}\n\nstatic inline void setCenterLayoutPosition(\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection axis,\n    const float containingBlockWidth) {\n  float parentContentBoxSize =\n      parent->getLayout().measuredDimension(dimension(axis)) -\n      parent->getLayout().border(flexStartEdge(axis)) -\n      parent->getLayout().border(flexEndEdge(axis));\n\n  // https://www.w3.org/TR/css-grid-1/#abspos\n  // absolute positioned grid items are positioned relative to the padding edge\n  // of the grid container\n  if (!child->hasErrata(Errata::AbsolutePositionWithoutInsetsExcludesPadding) &&\n      parent->style().display() != Display::Grid) {\n    parentContentBoxSize -= parent->getLayout().padding(flexStartEdge(axis));\n    parentContentBoxSize -= parent->getLayout().padding(flexEndEdge(axis));\n  }\n\n  const float childOuterSize =\n      child->getLayout().measuredDimension(dimension(axis)) +\n      child->style().computeMarginForAxis(axis, containingBlockWidth);\n\n  float position = (parentContentBoxSize - childOuterSize) / 2.0f +\n      parent->getLayout().border(flexStartEdge(axis)) +\n      child->style().computeFlexStartMargin(\n          axis, direction, containingBlockWidth);\n\n  // https://www.w3.org/TR/css-grid-1/#abspos\n  // absolute positioned grid items are positioned relative to the padding edge\n  // of the grid container\n  if (!child->hasErrata(Errata::AbsolutePositionWithoutInsetsExcludesPadding) &&\n      parent->style().display() != Display::Grid) {\n    position += parent->getLayout().padding(flexStartEdge(axis));\n  }\n\n  child->setLayoutPosition(position, flexStartEdge(axis));\n}\n\nstatic void justifyAbsoluteChild(\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection mainAxis,\n    const float containingBlockWidth) {\n  const Justify justify = parent->style().display() == Display::Grid\n      ? resolveChildJustification(parent, child)\n      : parent->style().justifyContent();\n  switch (justify) {\n    case Justify::Start:\n    case Justify::Auto:\n    case Justify::Stretch:\n    case Justify::FlexStart:\n    case Justify::SpaceBetween:\n      setFlexStartLayoutPosition(\n          parent, child, direction, mainAxis, containingBlockWidth);\n      break;\n    case Justify::End:\n    case Justify::FlexEnd:\n      setFlexEndLayoutPosition(\n          parent, child, direction, mainAxis, containingBlockWidth);\n      break;\n    case Justify::Center:\n    case Justify::SpaceAround:\n    case Justify::SpaceEvenly:\n      setCenterLayoutPosition(\n          parent, child, direction, mainAxis, containingBlockWidth);\n      break;\n  }\n}\n\nstatic void alignAbsoluteChild(\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection crossAxis,\n    const float containingBlockWidth) {\n  Align itemAlign = resolveChildAlignment(parent, child);\n  const Wrap parentWrap = parent->style().flexWrap();\n  if (parentWrap == Wrap::WrapReverse) {\n    if (itemAlign == Align::FlexEnd) {\n      itemAlign = Align::FlexStart;\n    } else if (itemAlign != Align::Center) {\n      itemAlign = Align::FlexEnd;\n    }\n  }\n\n  switch (itemAlign) {\n    case Align::Start:\n    case Align::Auto:\n    case Align::FlexStart:\n    case Align::Baseline:\n    case Align::SpaceAround:\n    case Align::SpaceBetween:\n    case Align::Stretch:\n    case Align::SpaceEvenly:\n      setFlexStartLayoutPosition(\n          parent, child, direction, crossAxis, containingBlockWidth);\n      break;\n    case Align::End:\n    case Align::FlexEnd:\n      setFlexEndLayoutPosition(\n          parent, child, direction, crossAxis, containingBlockWidth);\n      break;\n    case Align::Center:\n      setCenterLayoutPosition(\n          parent, child, direction, crossAxis, containingBlockWidth);\n      break;\n  }\n}\n\n/*\n * Absolutely positioned nodes do not participate in flex layout and thus their\n * positions can be determined independently from the rest of their siblings.\n * For each axis there are essentially two cases:\n *\n * 1) The node has insets defined. In this case we can just use these to\n *    determine the position of the node.\n * 2) The node does not have insets defined. In this case we look at the style\n *    of the parent to position the node. Things like justify content and\n *    align content will move absolute children around. If none of these\n *    special properties are defined, the child is positioned at the start\n *    (defined by flex direction) of the leading flex line.\n *\n * This function does that positioning for the given axis. The spec has more\n * information on this topic: https://www.w3.org/TR/css-flexbox-1/#abspos-items\n */\nstatic void positionAbsoluteChild(\n    const yoga::Node* const containingNode,\n    const yoga::Node* const parent,\n    yoga::Node* child,\n    const Direction direction,\n    const FlexDirection axis,\n    const bool isMainAxis,\n    const float containingBlockWidth,\n    const float containingBlockHeight) {\n  const bool isAxisRow = isRow(axis);\n  const float containingBlockSize =\n      isAxisRow ? containingBlockWidth : containingBlockHeight;\n\n  // The inline-start position takes priority over the end position in the case\n  // that they are both set and the node has a fixed width. Thus we only have 2\n  // cases here: if inline-start is defined and if inline-end is defined.\n  //\n  // Despite checking inline-start to honor prioritization of insets, we write\n  // to the flex-start edge because this algorithm works by positioning on the\n  // flex-start edge and then filling in the flex-end direction at the end if\n  // necessary.\n  if (child->style().isInlineStartPositionDefined(axis, direction) &&\n      !child->style().isInlineStartPositionAuto(axis, direction)) {\n    const float positionRelativeToInlineStart =\n        child->style().computeInlineStartPosition(\n            axis, direction, containingBlockSize) +\n        containingNode->style().computeInlineStartBorder(axis, direction) +\n        child->style().computeInlineStartMargin(\n            axis, direction, containingBlockSize);\n    const float positionRelativeToFlexStart =\n        inlineStartEdge(axis, direction) != flexStartEdge(axis)\n        ? getPositionOfOppositeEdge(\n              positionRelativeToInlineStart, axis, containingNode, child)\n        : positionRelativeToInlineStart;\n\n    child->setLayoutPosition(positionRelativeToFlexStart, flexStartEdge(axis));\n  } else if (\n      child->style().isInlineEndPositionDefined(axis, direction) &&\n      !child->style().isInlineEndPositionAuto(axis, direction)) {\n    const float positionRelativeToInlineStart =\n        containingNode->getLayout().measuredDimension(dimension(axis)) -\n        child->getLayout().measuredDimension(dimension(axis)) -\n        containingNode->style().computeInlineEndBorder(axis, direction) -\n        child->style().computeInlineEndMargin(\n            axis, direction, containingBlockSize) -\n        child->style().computeInlineEndPosition(\n            axis, direction, containingBlockSize);\n    const float positionRelativeToFlexStart =\n        inlineStartEdge(axis, direction) != flexStartEdge(axis)\n        ? getPositionOfOppositeEdge(\n              positionRelativeToInlineStart, axis, containingNode, child)\n        : positionRelativeToInlineStart;\n\n    child->setLayoutPosition(positionRelativeToFlexStart, flexStartEdge(axis));\n  } else {\n    isMainAxis ? justifyAbsoluteChild(\n                     parent, child, direction, axis, containingBlockWidth)\n               : alignAbsoluteChild(\n                     parent, child, direction, axis, containingBlockWidth);\n  }\n}\n\nvoid layoutAbsoluteChild(\n    const yoga::Node* const containingNode,\n    const yoga::Node* const node,\n    yoga::Node* const child,\n    const float containingBlockWidth,\n    const float containingBlockHeight,\n    const SizingMode widthMode,\n    const Direction direction,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  // For grid containers, use inline (Row) and block (Column) axes for\n  // positioning, since grid alignment properties (justify-self, align-self)\n  // operate on inline/block axes, not main/cross axes based on flex-direction.\n  const FlexDirection mainAxis = node->style().display() == Display::Grid\n      ? resolveDirection(FlexDirection::Row, direction)\n      : resolveDirection(node->style().flexDirection(), direction);\n  const FlexDirection crossAxis = node->style().display() == Display::Grid\n      ? FlexDirection::Column\n      : resolveCrossDirection(mainAxis, direction);\n  const bool isMainAxisRow = isRow(mainAxis);\n\n  float childWidth = YGUndefined;\n  float childHeight = YGUndefined;\n  SizingMode childWidthSizingMode = SizingMode::MaxContent;\n  SizingMode childHeightSizingMode = SizingMode::MaxContent;\n\n  auto marginRow = child->style().computeMarginForAxis(\n      FlexDirection::Row, containingBlockWidth);\n  auto marginColumn = child->style().computeMarginForAxis(\n      FlexDirection::Column, containingBlockWidth);\n\n  if (child->hasDefiniteLength(Dimension::Width, containingBlockWidth)) {\n    childWidth = child\n                     ->getResolvedDimension(\n                         direction,\n                         Dimension::Width,\n                         containingBlockWidth,\n                         containingBlockWidth)\n                     .unwrap() +\n        marginRow;\n  } else {\n    // If the child doesn't have a specified width, compute the width based on\n    // the left/right offsets if they're defined.\n    if (child->style().isFlexStartPositionDefined(\n            FlexDirection::Row, direction) &&\n        child->style().isFlexEndPositionDefined(\n            FlexDirection::Row, direction) &&\n        !child->style().isFlexStartPositionAuto(\n            FlexDirection::Row, direction) &&\n        !child->style().isFlexEndPositionAuto(FlexDirection::Row, direction)) {\n      childWidth =\n          containingNode->getLayout().measuredDimension(Dimension::Width) -\n          (containingNode->style().computeFlexStartBorder(\n               FlexDirection::Row, direction) +\n           containingNode->style().computeFlexEndBorder(\n               FlexDirection::Row, direction)) -\n          (child->style().computeFlexStartPosition(\n               FlexDirection::Row, direction, containingBlockWidth) +\n           child->style().computeFlexEndPosition(\n               FlexDirection::Row, direction, containingBlockWidth));\n      childWidth = boundAxis(\n          child,\n          FlexDirection::Row,\n          direction,\n          childWidth,\n          containingBlockWidth,\n          containingBlockWidth);\n    }\n  }\n\n  if (child->hasDefiniteLength(Dimension::Height, containingBlockHeight)) {\n    childHeight = child\n                      ->getResolvedDimension(\n                          direction,\n                          Dimension::Height,\n                          containingBlockHeight,\n                          containingBlockWidth)\n                      .unwrap() +\n        marginColumn;\n  } else {\n    // If the child doesn't have a specified height, compute the height based\n    // on the top/bottom offsets if they're defined.\n    if (child->style().isFlexStartPositionDefined(\n            FlexDirection::Column, direction) &&\n        child->style().isFlexEndPositionDefined(\n            FlexDirection::Column, direction) &&\n        !child->style().isFlexStartPositionAuto(\n            FlexDirection::Column, direction) &&\n        !child->style().isFlexEndPositionAuto(\n            FlexDirection::Column, direction)) {\n      childHeight =\n          containingNode->getLayout().measuredDimension(Dimension::Height) -\n          (containingNode->style().computeFlexStartBorder(\n               FlexDirection::Column, direction) +\n           containingNode->style().computeFlexEndBorder(\n               FlexDirection::Column, direction)) -\n          (child->style().computeFlexStartPosition(\n               FlexDirection::Column, direction, containingBlockHeight) +\n           child->style().computeFlexEndPosition(\n               FlexDirection::Column, direction, containingBlockHeight));\n      childHeight = boundAxis(\n          child,\n          FlexDirection::Column,\n          direction,\n          childHeight,\n          containingBlockHeight,\n          containingBlockWidth);\n    }\n  }\n\n  // Exactly one dimension needs to be defined for us to be able to do aspect\n  // ratio calculation. One dimension being the anchor and the other being\n  // flexible.\n  const auto& childStyle = child->style();\n  if (yoga::isUndefined(childWidth) ^ yoga::isUndefined(childHeight)) {\n    if (childStyle.aspectRatio().isDefined()) {\n      if (yoga::isUndefined(childWidth)) {\n        childWidth = marginRow +\n            (childHeight - marginColumn) * childStyle.aspectRatio().unwrap();\n      } else if (yoga::isUndefined(childHeight)) {\n        childHeight = marginColumn +\n            (childWidth - marginRow) / childStyle.aspectRatio().unwrap();\n      }\n    }\n  }\n\n  // If we're still missing one or the other dimension, measure the content.\n  if (yoga::isUndefined(childWidth) || yoga::isUndefined(childHeight)) {\n    childWidthSizingMode = yoga::isUndefined(childWidth)\n        ? SizingMode::MaxContent\n        : SizingMode::StretchFit;\n    childHeightSizingMode = yoga::isUndefined(childHeight)\n        ? SizingMode::MaxContent\n        : SizingMode::StretchFit;\n\n    // If the size of the owner is defined then try to constrain the absolute\n    // child to that size as well. This allows text within the absolute child\n    // to wrap to the size of its owner. This is the same behavior as many\n    // browsers implement.\n    if (!isMainAxisRow && yoga::isUndefined(childWidth) &&\n        widthMode != SizingMode::MaxContent &&\n        yoga::isDefined(containingBlockWidth) && containingBlockWidth > 0) {\n      childWidth = containingBlockWidth;\n      childWidthSizingMode = SizingMode::FitContent;\n    }\n\n    calculateLayoutInternal(\n        child,\n        childWidth,\n        childHeight,\n        direction,\n        childWidthSizingMode,\n        childHeightSizingMode,\n        containingBlockWidth,\n        containingBlockHeight,\n        false,\n        LayoutPassReason::kAbsMeasureChild,\n        layoutMarkerData,\n        depth,\n        generationCount);\n    childWidth = child->getLayout().measuredDimension(Dimension::Width) +\n        child->style().computeMarginForAxis(\n            FlexDirection::Row, containingBlockWidth);\n    childHeight = child->getLayout().measuredDimension(Dimension::Height) +\n        child->style().computeMarginForAxis(\n            FlexDirection::Column, containingBlockWidth);\n  }\n\n  calculateLayoutInternal(\n      child,\n      childWidth,\n      childHeight,\n      direction,\n      SizingMode::StretchFit,\n      SizingMode::StretchFit,\n      containingBlockWidth,\n      containingBlockHeight,\n      true,\n      LayoutPassReason::kAbsLayout,\n      layoutMarkerData,\n      depth,\n      generationCount);\n\n  positionAbsoluteChild(\n      containingNode,\n      node,\n      child,\n      direction,\n      mainAxis,\n      true /*isMainAxis*/,\n      containingBlockWidth,\n      containingBlockHeight);\n  positionAbsoluteChild(\n      containingNode,\n      node,\n      child,\n      direction,\n      crossAxis,\n      false /*isMainAxis*/,\n      containingBlockWidth,\n      containingBlockHeight);\n}\n\nbool layoutAbsoluteDescendants(\n    yoga::Node* containingNode,\n    yoga::Node* currentNode,\n    SizingMode widthSizingMode,\n    Direction currentNodeDirection,\n    LayoutData& layoutMarkerData,\n    uint32_t currentDepth,\n    uint32_t generationCount,\n    float currentNodeLeftOffsetFromContainingBlock,\n    float currentNodeTopOffsetFromContainingBlock,\n    float containingNodeAvailableInnerWidth,\n    float containingNodeAvailableInnerHeight) {\n  bool hasNewLayout = false;\n  for (auto child : currentNode->getLayoutChildren()) {\n    if (child->style().display() == Display::None) {\n      continue;\n    } else if (child->style().positionType() == PositionType::Absolute) {\n      const bool absoluteErrata =\n          currentNode->hasErrata(Errata::AbsolutePercentAgainstInnerSize);\n      const float containingBlockWidth = absoluteErrata\n          ? containingNodeAvailableInnerWidth\n          : containingNode->getLayout().measuredDimension(Dimension::Width) -\n              containingNode->style().computeBorderForAxis(FlexDirection::Row);\n      const float containingBlockHeight = absoluteErrata\n          ? containingNodeAvailableInnerHeight\n          : containingNode->getLayout().measuredDimension(Dimension::Height) -\n              containingNode->style().computeBorderForAxis(\n                  FlexDirection::Column);\n\n      layoutAbsoluteChild(\n          containingNode,\n          currentNode,\n          child,\n          containingBlockWidth,\n          containingBlockHeight,\n          widthSizingMode,\n          currentNodeDirection,\n          layoutMarkerData,\n          currentDepth,\n          generationCount);\n\n      hasNewLayout = hasNewLayout || child->getHasNewLayout();\n\n      /*\n       * At this point the child has its position set but only on its the\n       * parent's flexStart edge. Additionally, this position should be\n       * interpreted relative to the containing block of the child if it had\n       * insets defined. So we need to adjust the position by subtracting the\n       * the parents offset from the containing block. However, getting that\n       * offset is complicated since the two nodes can have different main/cross\n       * axes.\n       */\n      const FlexDirection parentMainAxis = resolveDirection(\n          currentNode->style().flexDirection(), currentNodeDirection);\n      const FlexDirection parentCrossAxis =\n          resolveCrossDirection(parentMainAxis, currentNodeDirection);\n\n      if (needsTrailingPosition(parentMainAxis)) {\n        const bool mainInsetsDefined = isRow(parentMainAxis)\n            ? child->style().horizontalInsetsDefined()\n            : child->style().verticalInsetsDefined();\n        setChildTrailingPosition(\n            mainInsetsDefined ? containingNode : currentNode,\n            child,\n            parentMainAxis);\n      }\n      if (needsTrailingPosition(parentCrossAxis)) {\n        const bool crossInsetsDefined = isRow(parentCrossAxis)\n            ? child->style().horizontalInsetsDefined()\n            : child->style().verticalInsetsDefined();\n        setChildTrailingPosition(\n            crossInsetsDefined ? containingNode : currentNode,\n            child,\n            parentCrossAxis);\n      }\n\n      /*\n       * At this point we know the left and top physical edges of the child are\n       * set with positions that are relative to the containing block if insets\n       * are defined\n       */\n      const float childLeftPosition =\n          child->getLayout().position(PhysicalEdge::Left);\n      const float childTopPosition =\n          child->getLayout().position(PhysicalEdge::Top);\n\n      const float childLeftOffsetFromParent =\n          child->style().horizontalInsetsDefined()\n          ? (childLeftPosition - currentNodeLeftOffsetFromContainingBlock)\n          : childLeftPosition;\n      const float childTopOffsetFromParent =\n          child->style().verticalInsetsDefined()\n          ? (childTopPosition - currentNodeTopOffsetFromContainingBlock)\n          : childTopPosition;\n\n      child->setLayoutPosition(childLeftOffsetFromParent, PhysicalEdge::Left);\n      child->setLayoutPosition(childTopOffsetFromParent, PhysicalEdge::Top);\n    } else if (\n        child->style().positionType() == PositionType::Static &&\n        !child->alwaysFormsContainingBlock()) {\n      // We may write new layout results for absolute descendants of \"child\"\n      // which are positioned relative to the current containing block instead\n      // of their parent. \"child\" may not be dirty, or have new constraints, so\n      // absolute positioning may be the first time during this layout pass that\n      // we need to mutate these descendents. Make sure the path of\n      // nodes to them is mutable before positioning.\n      child->cloneChildrenIfNeeded();\n      const Direction childDirection =\n          child->resolveDirection(currentNodeDirection);\n      // By now all descendants of the containing block that are not absolute\n      // will have their positions set for left and top.\n      const float childLeftOffsetFromContainingBlock =\n          currentNodeLeftOffsetFromContainingBlock +\n          child->getLayout().position(PhysicalEdge::Left);\n      const float childTopOffsetFromContainingBlock =\n          currentNodeTopOffsetFromContainingBlock +\n          child->getLayout().position(PhysicalEdge::Top);\n\n      hasNewLayout = layoutAbsoluteDescendants(\n                         containingNode,\n                         child,\n                         widthSizingMode,\n                         childDirection,\n                         layoutMarkerData,\n                         currentDepth + 1,\n                         generationCount,\n                         childLeftOffsetFromContainingBlock,\n                         childTopOffsetFromContainingBlock,\n                         containingNodeAvailableInnerWidth,\n                         containingNodeAvailableInnerHeight) ||\n          hasNewLayout;\n\n      if (hasNewLayout) {\n        child->setHasNewLayout(hasNewLayout);\n      }\n    }\n  }\n  return hasNewLayout;\n}\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/AbsoluteLayout.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\nvoid layoutAbsoluteChild(\n    const yoga::Node* containingNode,\n    const yoga::Node* node,\n    yoga::Node* child,\n    float containingBlockWidth,\n    float containingBlockHeight,\n    SizingMode widthMode,\n    Direction direction,\n    LayoutData& layoutMarkerData,\n    uint32_t depth,\n    uint32_t generationCount);\n\n// Returns if some absolute descendant has new layout\nbool layoutAbsoluteDescendants(\n    yoga::Node* containingNode,\n    yoga::Node* currentNode,\n    SizingMode widthSizingMode,\n    Direction currentNodeDirection,\n    LayoutData& layoutMarkerData,\n    uint32_t currentDepth,\n    uint32_t generationCount,\n    float currentNodeMainOffsetFromContainingBlock,\n    float currentNodeCrossOffsetFromContainingBlock,\n    float containingNodeAvailableInnerWidth,\n    float containingNodeAvailableInnerHeight);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/Align.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\ninline Align resolveChildAlignment(\n    const yoga::Node* node,\n    const yoga::Node* child) {\n  const Align align = child->style().alignSelf() == Align::Auto\n      ? node->style().alignItems()\n      : child->style().alignSelf();\n\n  if (node->style().display() == Display::Flex && align == Align::Baseline &&\n      isColumn(node->style().flexDirection())) {\n    return Align::FlexStart;\n  }\n\n  return align;\n}\n\ninline Justify resolveChildJustification(\n    const yoga::Node* node,\n    const yoga::Node* child) {\n  return child->style().justifySelf() == Justify::Auto\n      ? node->style().justifyItems()\n      : child->style().justifySelf();\n}\n\n/**\n * Fallback alignment to use on overflow\n * https://www.w3.org/TR/css-align-3/#distribution-values\n */\nconstexpr Align fallbackAlignment(Align align) {\n  switch (align) {\n      // Fallback to flex-start\n    case Align::SpaceBetween:\n    case Align::Stretch:\n      return Align::FlexStart;\n\n    // Fallback to safe center. TODO (T208209388): This should be aligned to\n    // Start instead of FlexStart (for row-reverse containers)\n    case Align::SpaceAround:\n    case Align::SpaceEvenly:\n      return Align::FlexStart;\n    default:\n      return align;\n  }\n}\n\n/**\n * Fallback alignment to use on overflow\n * https://www.w3.org/TR/css-align-3/#distribution-values\n */\nconstexpr Justify fallbackAlignment(Justify align) {\n  switch (align) {\n      // Fallback to flex-start\n    case Justify::SpaceBetween:\n      // TODO: Support `justify-content: stretch`\n      // case Justify::Stretch:\n      return Justify::FlexStart;\n\n    // Fallback to safe center. TODO (T208209388): This should be aligned to\n    // Start instead of FlexStart (for row-reverse containers)\n    case Justify::SpaceAround:\n    case Justify::SpaceEvenly:\n      return Justify::FlexStart;\n    default:\n      return align;\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/Baseline.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/Align.h>\n#include <yoga/algorithm/Baseline.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/event/event.h>\n\nnamespace facebook::yoga {\n\nfloat calculateBaseline(const yoga::Node* node) {\n  if (node->hasBaselineFunc()) {\n    Event::publish<Event::NodeBaselineStart>(node);\n\n    const float baseline = node->baseline(\n        node->getLayout().measuredDimension(Dimension::Width),\n        node->getLayout().measuredDimension(Dimension::Height));\n\n    Event::publish<Event::NodeBaselineEnd>(node);\n\n    yoga::assertFatalWithNode(\n        node,\n        !std::isnan(baseline),\n        \"Expect custom baseline function to not return NaN\");\n    return baseline;\n  }\n\n  yoga::Node* baselineChild = nullptr;\n  for (auto child : node->getLayoutChildren()) {\n    if (child->getLineIndex() > 0) {\n      break;\n    }\n    if (child->style().positionType() == PositionType::Absolute) {\n      continue;\n    }\n    if (resolveChildAlignment(node, child) == Align::Baseline ||\n        child->isReferenceBaseline()) {\n      baselineChild = child;\n      break;\n    }\n\n    if (baselineChild == nullptr) {\n      baselineChild = child;\n    }\n  }\n\n  if (baselineChild == nullptr) {\n    return node->getLayout().measuredDimension(Dimension::Height);\n  }\n\n  const float baseline = calculateBaseline(baselineChild);\n  return baseline + baselineChild->getLayout().position(PhysicalEdge::Top);\n}\n\nbool isBaselineLayout(const yoga::Node* node) {\n  if (isColumn(node->style().flexDirection())) {\n    return false;\n  }\n  if (node->style().alignItems() == Align::Baseline) {\n    return true;\n  }\n  for (auto child : node->getLayoutChildren()) {\n    if (child->style().positionType() != PositionType::Absolute &&\n        child->style().alignSelf() == Align::Baseline) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/Baseline.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\n// Calculate baseline represented as an offset from the top edge of the node.\nfloat calculateBaseline(const yoga::Node* node);\n\n// Whether any of the children of this node participate in baseline alignment\nbool isBaselineLayout(const yoga::Node* node);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/BoundAxis.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/enums/Dimension.h>\n#include <yoga/enums/FlexDirection.h>\n#include <yoga/node/Node.h>\n#include <yoga/numeric/Comparison.h>\n#include <yoga/numeric/FloatOptional.h>\n\nnamespace facebook::yoga {\n\ninline float paddingAndBorderForAxis(\n    const yoga::Node* const node,\n    const FlexDirection axis,\n    const Direction direction,\n    const float widthSize) {\n  return node->style().computeInlineStartPaddingAndBorder(\n             axis, direction, widthSize) +\n      node->style().computeInlineEndPaddingAndBorder(\n          axis, direction, widthSize);\n}\n\ninline FloatOptional boundAxisWithinMinAndMax(\n    const yoga::Node* const node,\n    const Direction direction,\n    const FlexDirection axis,\n    const FloatOptional value,\n    const float axisSize,\n    const float widthSize) {\n  FloatOptional min;\n  FloatOptional max;\n\n  if (isColumn(axis)) {\n    min = node->style().resolvedMinDimension(\n        direction, Dimension::Height, axisSize, widthSize);\n    max = node->style().resolvedMaxDimension(\n        direction, Dimension::Height, axisSize, widthSize);\n  } else if (isRow(axis)) {\n    min = node->style().resolvedMinDimension(\n        direction, Dimension::Width, axisSize, widthSize);\n    max = node->style().resolvedMaxDimension(\n        direction, Dimension::Width, axisSize, widthSize);\n  }\n\n  if (max >= FloatOptional{0} && value > max) {\n    return max;\n  }\n\n  if (min >= FloatOptional{0} && value < min) {\n    return min;\n  }\n\n  return value;\n}\n\n// Like boundAxisWithinMinAndMax but also ensures that the value doesn't\n// go below the padding and border amount.\ninline float boundAxis(\n    const yoga::Node* const node,\n    const FlexDirection axis,\n    const Direction direction,\n    const float value,\n    const float axisSize,\n    const float widthSize) {\n  return yoga::maxOrDefined(\n      boundAxisWithinMinAndMax(\n          node, direction, axis, FloatOptional{value}, axisSize, widthSize)\n          .unwrap(),\n      paddingAndBorderForAxis(node, axis, direction, widthSize));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/Cache.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/algorithm/Cache.h>\n#include <yoga/algorithm/PixelGrid.h>\n#include <yoga/numeric/Comparison.h>\n\nnamespace facebook::yoga {\n\nstatic inline bool sizeIsExactAndMatchesOldMeasuredSize(\n    SizingMode sizeMode,\n    float size,\n    float lastComputedSize) {\n  return sizeMode == SizingMode::StretchFit &&\n      yoga::inexactEquals(size, lastComputedSize);\n}\n\nstatic inline bool oldSizeIsMaxContentAndStillFits(\n    SizingMode sizeMode,\n    float size,\n    SizingMode lastSizeMode,\n    float lastComputedSize) {\n  return sizeMode == SizingMode::FitContent &&\n      lastSizeMode == SizingMode::MaxContent &&\n      (size >= lastComputedSize || yoga::inexactEquals(size, lastComputedSize));\n}\n\nstatic inline bool newSizeIsStricterAndStillValid(\n    SizingMode sizeMode,\n    float size,\n    SizingMode lastSizeMode,\n    float lastSize,\n    float lastComputedSize) {\n  return lastSizeMode == SizingMode::FitContent &&\n      sizeMode == SizingMode::FitContent && yoga::isDefined(lastSize) &&\n      yoga::isDefined(size) && yoga::isDefined(lastComputedSize) &&\n      lastSize > size &&\n      (lastComputedSize <= size || yoga::inexactEquals(size, lastComputedSize));\n}\n\nbool canUseCachedMeasurement(\n    const SizingMode widthMode,\n    const float availableWidth,\n    const SizingMode heightMode,\n    const float availableHeight,\n    const SizingMode lastWidthMode,\n    const float lastAvailableWidth,\n    const SizingMode lastHeightMode,\n    const float lastAvailableHeight,\n    const float lastComputedWidth,\n    const float lastComputedHeight,\n    const float marginRow,\n    const float marginColumn,\n    const yoga::Config* const config) {\n  if ((yoga::isDefined(lastComputedHeight) && lastComputedHeight < 0) ||\n      ((yoga::isDefined(lastComputedWidth)) && lastComputedWidth < 0)) {\n    return false;\n  }\n\n  const float pointScaleFactor = config->getPointScaleFactor();\n\n  bool useRoundedComparison = config != nullptr && pointScaleFactor != 0;\n  const float effectiveWidth = useRoundedComparison\n      ? roundValueToPixelGrid(availableWidth, pointScaleFactor, false, false)\n      : availableWidth;\n  const float effectiveHeight = useRoundedComparison\n      ? roundValueToPixelGrid(availableHeight, pointScaleFactor, false, false)\n      : availableHeight;\n  const float effectiveLastWidth = useRoundedComparison\n      ? roundValueToPixelGrid(\n            lastAvailableWidth, pointScaleFactor, false, false)\n      : lastAvailableWidth;\n  const float effectiveLastHeight = useRoundedComparison\n      ? roundValueToPixelGrid(\n            lastAvailableHeight, pointScaleFactor, false, false)\n      : lastAvailableHeight;\n\n  const bool hasSameWidthSpec = lastWidthMode == widthMode &&\n      yoga::inexactEquals(effectiveLastWidth, effectiveWidth);\n  const bool hasSameHeightSpec = lastHeightMode == heightMode &&\n      yoga::inexactEquals(effectiveLastHeight, effectiveHeight);\n\n  const bool widthIsCompatible =\n      hasSameWidthSpec ||\n      sizeIsExactAndMatchesOldMeasuredSize(\n          widthMode, availableWidth - marginRow, lastComputedWidth) ||\n      oldSizeIsMaxContentAndStillFits(\n          widthMode,\n          availableWidth - marginRow,\n          lastWidthMode,\n          lastComputedWidth) ||\n      newSizeIsStricterAndStillValid(\n          widthMode,\n          availableWidth - marginRow,\n          lastWidthMode,\n          lastAvailableWidth,\n          lastComputedWidth);\n\n  const bool heightIsCompatible = hasSameHeightSpec ||\n      sizeIsExactAndMatchesOldMeasuredSize(\n                                      heightMode,\n                                      availableHeight - marginColumn,\n                                      lastComputedHeight) ||\n      oldSizeIsMaxContentAndStillFits(heightMode,\n                                      availableHeight - marginColumn,\n                                      lastHeightMode,\n                                      lastComputedHeight) ||\n      newSizeIsStricterAndStillValid(heightMode,\n                                     availableHeight - marginColumn,\n                                     lastHeightMode,\n                                     lastAvailableHeight,\n                                     lastComputedHeight);\n\n  return widthIsCompatible && heightIsCompatible;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/Cache.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/algorithm/SizingMode.h>\n#include <yoga/config/Config.h>\n\nnamespace facebook::yoga {\n\nbool canUseCachedMeasurement(\n    SizingMode widthMode,\n    float availableWidth,\n    SizingMode heightMode,\n    float availableHeight,\n    SizingMode lastWidthMode,\n    float lastAvailableWidth,\n    SizingMode lastHeightMode,\n    float lastAvailableHeight,\n    float lastComputedWidth,\n    float lastComputedHeight,\n    float marginRow,\n    float marginColumn,\n    const yoga::Config* config);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/CalculateLayout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <algorithm>\n#include <atomic>\n#include <cfloat>\n#include <cmath>\n#include <cstring>\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/AbsoluteLayout.h>\n#include <yoga/algorithm/Align.h>\n#include <yoga/algorithm/Baseline.h>\n#include <yoga/algorithm/BoundAxis.h>\n#include <yoga/algorithm/Cache.h>\n#include <yoga/algorithm/CalculateLayout.h>\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/algorithm/FlexLine.h>\n#include <yoga/algorithm/PixelGrid.h>\n#include <yoga/algorithm/SizingMode.h>\n#include <yoga/algorithm/TrailingPosition.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/debug/Log.h>\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n#include <yoga/numeric/Comparison.h>\n#include <yoga/numeric/FloatOptional.h>\n\nnamespace facebook::yoga {\n\nstd::atomic<uint32_t> gCurrentGenerationCount(0);\n\nvoid constrainMaxSizeForMode(\n    const yoga::Node* node,\n    Direction direction,\n    FlexDirection axis,\n    float ownerAxisSize,\n    float ownerWidth,\n    /*in_out*/ SizingMode* mode,\n    /*in_out*/ float* size) {\n  const FloatOptional maxSize =\n      node->style().resolvedMaxDimension(\n          direction, dimension(axis), ownerAxisSize, ownerWidth) +\n      FloatOptional(node->style().computeMarginForAxis(axis, ownerWidth));\n  switch (*mode) {\n    case SizingMode::StretchFit:\n    case SizingMode::FitContent:\n      *size = (maxSize.isUndefined() || *size < maxSize.unwrap())\n          ? *size\n          : maxSize.unwrap();\n      break;\n    case SizingMode::MaxContent:\n      if (maxSize.isDefined()) {\n        *mode = SizingMode::FitContent;\n        *size = maxSize.unwrap();\n      }\n      break;\n  }\n}\n\nstatic void computeFlexBasisForChild(\n    const yoga::Node* const node,\n    yoga::Node* const child,\n    const float width,\n    const SizingMode widthMode,\n    const float height,\n    const float ownerWidth,\n    const float ownerHeight,\n    const SizingMode heightMode,\n    const Direction direction,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  const FlexDirection mainAxis =\n      resolveDirection(node->style().flexDirection(), direction);\n  const bool isMainAxisRow = isRow(mainAxis);\n  const float mainAxisSize = isMainAxisRow ? width : height;\n  const float mainAxisOwnerSize = isMainAxisRow ? ownerWidth : ownerHeight;\n\n  float childWidth = YGUndefined;\n  float childHeight = YGUndefined;\n  SizingMode childWidthSizingMode;\n  SizingMode childHeightSizingMode;\n\n  const FloatOptional resolvedFlexBasis = child->resolveFlexBasis(\n      direction, mainAxis, mainAxisOwnerSize, ownerWidth);\n  const bool isRowStyleDimDefined =\n      child->hasDefiniteLength(Dimension::Width, ownerWidth);\n  const bool isColumnStyleDimDefined =\n      child->hasDefiniteLength(Dimension::Height, ownerHeight);\n\n  const bool fixFlexBasisFitContent =\n      node->getConfig()->isExperimentalFeatureEnabled(\n          ExperimentalFeature::FixFlexBasisFitContent);\n\n  bool useResolvedFlexBasis =\n      resolvedFlexBasis.isDefined() && yoga::isDefined(mainAxisSize);\n  if (fixFlexBasisFitContent && resolvedFlexBasis.isDefined() &&\n      resolvedFlexBasis.unwrap() > 0) {\n    useResolvedFlexBasis = true;\n  }\n\n  if (useResolvedFlexBasis) {\n    if (child->getLayout().computedFlexBasis.isUndefined() ||\n        (child->getConfig()->isExperimentalFeatureEnabled(\n             ExperimentalFeature::WebFlexBasis) &&\n         child->getLayout().computedFlexBasisGeneration != generationCount)) {\n      const FloatOptional paddingAndBorder = FloatOptional(\n          paddingAndBorderForAxis(child, mainAxis, direction, ownerWidth));\n      child->setLayoutComputedFlexBasis(\n          yoga::maxOrDefined(resolvedFlexBasis, paddingAndBorder));\n    }\n  } else if (isMainAxisRow && isRowStyleDimDefined) {\n    // The width is definite, so use that as the flex basis.\n    const FloatOptional paddingAndBorder =\n        FloatOptional(paddingAndBorderForAxis(\n            child, FlexDirection::Row, direction, ownerWidth));\n\n    child->setLayoutComputedFlexBasis(\n        yoga::maxOrDefined(\n            child->getResolvedDimension(\n                direction, Dimension::Width, ownerWidth, ownerWidth),\n            paddingAndBorder));\n  } else if (!isMainAxisRow && isColumnStyleDimDefined) {\n    // The height is definite, so use that as the flex basis.\n    const FloatOptional paddingAndBorder =\n        FloatOptional(paddingAndBorderForAxis(\n            child, FlexDirection::Column, direction, ownerWidth));\n    child->setLayoutComputedFlexBasis(\n        yoga::maxOrDefined(\n            child->getResolvedDimension(\n                direction, Dimension::Height, ownerHeight, ownerWidth),\n            paddingAndBorder));\n  } else {\n    // Compute the flex basis and hypothetical main size (i.e. the clamped flex\n    // basis).\n    childWidthSizingMode = SizingMode::MaxContent;\n    childHeightSizingMode = SizingMode::MaxContent;\n\n    auto marginRow =\n        child->style().computeMarginForAxis(FlexDirection::Row, ownerWidth);\n    auto marginColumn =\n        child->style().computeMarginForAxis(FlexDirection::Column, ownerWidth);\n\n    if (isRowStyleDimDefined) {\n      childWidth = child\n                       ->getResolvedDimension(\n                           direction, Dimension::Width, ownerWidth, ownerWidth)\n                       .unwrap() +\n          marginRow;\n      childWidthSizingMode = SizingMode::StretchFit;\n    }\n    if (isColumnStyleDimDefined) {\n      childHeight =\n          child\n              ->getResolvedDimension(\n                  direction, Dimension::Height, ownerHeight, ownerWidth)\n              .unwrap() +\n          marginColumn;\n      childHeightSizingMode = SizingMode::StretchFit;\n    }\n\n    // The W3C spec doesn't say anything about the 'overflow' property, but all\n    // major browsers appear to implement the following logic.\n    if ((!isMainAxisRow && node->style().overflow() == Overflow::Scroll) ||\n        node->style().overflow() != Overflow::Scroll) {\n      if (yoga::isUndefined(childWidth) && yoga::isDefined(width)) {\n        childWidth = width;\n        childWidthSizingMode = SizingMode::FitContent;\n      }\n    }\n\n    // For height in the main axis (column direction): when the\n    // FixFlexBasisFitContent feature is enabled, skip FitContent for\n    // non-measure container children. This makes the flex basis independent\n    // of the parent's content-determined height, preventing unnecessary\n    // re-measurement cascades when a sibling changes size in a ScrollView.\n    //\n    // We only optimize the height (column) axis because text wrapping depends\n    // on width constraints propagating through container nodes. Removing\n    // FitContent from the width axis would cause text inside nested\n    // containers to stop wrapping.\n    bool applyHeightFitContent =\n        isMainAxisRow || node->style().overflow() != Overflow::Scroll;\n    if (fixFlexBasisFitContent) {\n      applyHeightFitContent = isMainAxisRow ||\n          (child->hasMeasureFunc() &&\n           node->style().overflow() != Overflow::Scroll);\n    }\n    if (applyHeightFitContent && yoga::isUndefined(childHeight) &&\n        yoga::isDefined(height)) {\n      childHeight = height;\n      childHeightSizingMode = SizingMode::FitContent;\n    }\n\n    const auto& childStyle = child->style();\n    if (childStyle.aspectRatio().isDefined()) {\n      if (!isMainAxisRow && childWidthSizingMode == SizingMode::StretchFit) {\n        childHeight = marginColumn +\n            (childWidth - marginRow) / childStyle.aspectRatio().unwrap();\n        childHeightSizingMode = SizingMode::StretchFit;\n      } else if (\n          isMainAxisRow && childHeightSizingMode == SizingMode::StretchFit) {\n        childWidth = marginRow +\n            (childHeight - marginColumn) * childStyle.aspectRatio().unwrap();\n        childWidthSizingMode = SizingMode::StretchFit;\n      }\n    }\n\n    // If child has no defined size in the cross axis and is set to stretch, set\n    // the cross axis to be measured exactly with the available inner width\n\n    const bool hasExactWidth =\n        yoga::isDefined(width) && widthMode == SizingMode::StretchFit;\n    const bool childWidthStretch =\n        resolveChildAlignment(node, child) == Align::Stretch &&\n        childWidthSizingMode != SizingMode::StretchFit;\n    if (!isMainAxisRow && !isRowStyleDimDefined && hasExactWidth &&\n        childWidthStretch) {\n      childWidth = width;\n      childWidthSizingMode = SizingMode::StretchFit;\n      if (childStyle.aspectRatio().isDefined()) {\n        childHeight =\n            (childWidth - marginRow) / childStyle.aspectRatio().unwrap();\n        childHeightSizingMode = SizingMode::StretchFit;\n      }\n    }\n\n    const bool hasExactHeight =\n        yoga::isDefined(height) && heightMode == SizingMode::StretchFit;\n    const bool childHeightStretch =\n        resolveChildAlignment(node, child) == Align::Stretch &&\n        childHeightSizingMode != SizingMode::StretchFit;\n    if (isMainAxisRow && !isColumnStyleDimDefined && hasExactHeight &&\n        childHeightStretch) {\n      childHeight = height;\n      childHeightSizingMode = SizingMode::StretchFit;\n\n      if (childStyle.aspectRatio().isDefined()) {\n        childWidth =\n            (childHeight - marginColumn) * childStyle.aspectRatio().unwrap();\n        childWidthSizingMode = SizingMode::StretchFit;\n      }\n    }\n\n    constrainMaxSizeForMode(\n        child,\n        direction,\n        FlexDirection::Row,\n        ownerWidth,\n        ownerWidth,\n        &childWidthSizingMode,\n        &childWidth);\n    constrainMaxSizeForMode(\n        child,\n        direction,\n        FlexDirection::Column,\n        ownerHeight,\n        ownerWidth,\n        &childHeightSizingMode,\n        &childHeight);\n\n    // Measure the child\n    calculateLayoutInternal(\n        child,\n        childWidth,\n        childHeight,\n        direction,\n        childWidthSizingMode,\n        childHeightSizingMode,\n        ownerWidth,\n        ownerHeight,\n        false,\n        LayoutPassReason::kMeasureChild,\n        layoutMarkerData,\n        depth,\n        generationCount);\n\n    child->setLayoutComputedFlexBasis(FloatOptional(\n        yoga::maxOrDefined(\n            child->getLayout().measuredDimension(dimension(mainAxis)),\n            paddingAndBorderForAxis(child, mainAxis, direction, ownerWidth))));\n  }\n  child->setLayoutComputedFlexBasisGeneration(generationCount);\n}\n\nstatic void measureNodeWithMeasureFunc(\n    yoga::Node* const node,\n    const Direction direction,\n    float availableWidth,\n    float availableHeight,\n    const SizingMode widthSizingMode,\n    const SizingMode heightSizingMode,\n    const float ownerWidth,\n    const float ownerHeight,\n    LayoutData& layoutMarkerData,\n    const LayoutPassReason reason) {\n  yoga::assertFatalWithNode(\n      node,\n      node->hasMeasureFunc(),\n      \"Expected node to have custom measure function\");\n\n  if (widthSizingMode == SizingMode::MaxContent) {\n    availableWidth = YGUndefined;\n  }\n  if (heightSizingMode == SizingMode::MaxContent) {\n    availableHeight = YGUndefined;\n  }\n\n  const auto& layout = node->getLayout();\n  const float paddingAndBorderAxisRow = layout.padding(PhysicalEdge::Left) +\n      layout.padding(PhysicalEdge::Right) + layout.border(PhysicalEdge::Left) +\n      layout.border(PhysicalEdge::Right);\n  const float paddingAndBorderAxisColumn = layout.padding(PhysicalEdge::Top) +\n      layout.padding(PhysicalEdge::Bottom) + layout.border(PhysicalEdge::Top) +\n      layout.border(PhysicalEdge::Bottom);\n\n  // We want to make sure we don't call measure with negative size\n  const float innerWidth = yoga::isUndefined(availableWidth)\n      ? availableWidth\n      : yoga::maxOrDefined(0.0f, availableWidth - paddingAndBorderAxisRow);\n  const float innerHeight = yoga::isUndefined(availableHeight)\n      ? availableHeight\n      : yoga::maxOrDefined(0.0f, availableHeight - paddingAndBorderAxisColumn);\n\n  if (widthSizingMode == SizingMode::StretchFit &&\n      heightSizingMode == SizingMode::StretchFit) {\n    // Don't bother sizing the text if both dimensions are already defined.\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Row,\n            direction,\n            availableWidth,\n            ownerWidth,\n            ownerWidth),\n        Dimension::Width);\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Column,\n            direction,\n            availableHeight,\n            ownerHeight,\n            ownerWidth),\n        Dimension::Height);\n  } else {\n    Event::publish<Event::MeasureCallbackStart>(node);\n\n    // Measure the text under the current constraints.\n    const YGSize measuredSize = node->measure(\n        innerWidth,\n        measureMode(widthSizingMode),\n        innerHeight,\n        measureMode(heightSizingMode));\n\n    layoutMarkerData.measureCallbacks += 1;\n    layoutMarkerData.measureCallbackReasonsCount[static_cast<size_t>(reason)] +=\n        1;\n\n    Event::publish<Event::MeasureCallbackEnd>(\n        node,\n        {.width = innerWidth,\n         .widthMeasureMode = unscopedEnum(measureMode(widthSizingMode)),\n         .height = innerHeight,\n         .heightMeasureMode = unscopedEnum(measureMode(heightSizingMode)),\n         .measuredWidth = measuredSize.width,\n         .measuredHeight = measuredSize.height,\n         .reason = reason});\n\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Row,\n            direction,\n            (widthSizingMode == SizingMode::MaxContent ||\n             widthSizingMode == SizingMode::FitContent)\n                ? measuredSize.width + paddingAndBorderAxisRow\n                : availableWidth,\n            ownerWidth,\n            ownerWidth),\n        Dimension::Width);\n\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Column,\n            direction,\n            (heightSizingMode == SizingMode::MaxContent ||\n             heightSizingMode == SizingMode::FitContent)\n                ? measuredSize.height + paddingAndBorderAxisColumn\n                : availableHeight,\n            ownerHeight,\n            ownerWidth),\n        Dimension::Height);\n  }\n}\n\n// For nodes with no children, use the available values if they were provided,\n// or the minimum size as indicated by the padding and border sizes.\nstatic void measureNodeWithoutChildren(\n    yoga::Node* const node,\n    const Direction direction,\n    const float availableWidth,\n    const float availableHeight,\n    const SizingMode widthSizingMode,\n    const SizingMode heightSizingMode,\n    const float ownerWidth,\n    const float ownerHeight) {\n  const auto& layout = node->getLayout();\n\n  float width = availableWidth;\n  if (widthSizingMode == SizingMode::MaxContent ||\n      widthSizingMode == SizingMode::FitContent) {\n    width = layout.padding(PhysicalEdge::Left) +\n        layout.padding(PhysicalEdge::Right) +\n        layout.border(PhysicalEdge::Left) + layout.border(PhysicalEdge::Right);\n  }\n  node->setLayoutMeasuredDimension(\n      boundAxis(\n          node, FlexDirection::Row, direction, width, ownerWidth, ownerWidth),\n      Dimension::Width);\n\n  float height = availableHeight;\n  if (heightSizingMode == SizingMode::MaxContent ||\n      heightSizingMode == SizingMode::FitContent) {\n    height = layout.padding(PhysicalEdge::Top) +\n        layout.padding(PhysicalEdge::Bottom) +\n        layout.border(PhysicalEdge::Top) + layout.border(PhysicalEdge::Bottom);\n  }\n  node->setLayoutMeasuredDimension(\n      boundAxis(\n          node,\n          FlexDirection::Column,\n          direction,\n          height,\n          ownerHeight,\n          ownerWidth),\n      Dimension::Height);\n}\n\ninline bool isFixedSize(float dim, SizingMode sizingMode) {\n  return sizingMode == SizingMode::StretchFit ||\n      (yoga::isDefined(dim) && sizingMode == SizingMode::FitContent &&\n       dim <= 0.0);\n}\n\nstatic bool measureNodeWithFixedSize(\n    yoga::Node* const node,\n    const Direction direction,\n    const float availableWidth,\n    const float availableHeight,\n    const SizingMode widthSizingMode,\n    const SizingMode heightSizingMode,\n    const float ownerWidth,\n    const float ownerHeight) {\n  if (isFixedSize(availableWidth, widthSizingMode) &&\n      isFixedSize(availableHeight, heightSizingMode)) {\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Row,\n            direction,\n            yoga::isUndefined(availableWidth) ||\n                    (widthSizingMode == SizingMode::FitContent &&\n                     availableWidth < 0.0f)\n                ? 0.0f\n                : availableWidth,\n            ownerWidth,\n            ownerWidth),\n        Dimension::Width);\n\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            FlexDirection::Column,\n            direction,\n            yoga::isUndefined(availableHeight) ||\n                    (heightSizingMode == SizingMode::FitContent &&\n                     availableHeight < 0.0f)\n                ? 0.0f\n                : availableHeight,\n            ownerHeight,\n            ownerWidth),\n        Dimension::Height);\n    return true;\n  }\n\n  return false;\n}\n\nvoid zeroOutLayoutRecursively(yoga::Node* const node) {\n  node->getLayout() = {};\n  node->setLayoutDimension(0, Dimension::Width);\n  node->setLayoutDimension(0, Dimension::Height);\n  node->setHasNewLayout(true);\n\n  node->cloneChildrenIfNeeded();\n  for (const auto child : node->getChildren()) {\n    zeroOutLayoutRecursively(child);\n  }\n}\n\nvoid cleanupContentsNodesRecursively(yoga::Node* const node) {\n  if (node->hasContentsChildren()) [[unlikely]] {\n    node->cloneContentsChildrenIfNeeded();\n    for (auto child : node->getChildren()) {\n      if (child->style().display() == Display::Contents) {\n        child->getLayout() = {};\n        child->setLayoutDimension(0, Dimension::Width);\n        child->setLayoutDimension(0, Dimension::Height);\n        child->setHasNewLayout(true);\n        child->setDirty(false);\n        child->cloneChildrenIfNeeded();\n\n        cleanupContentsNodesRecursively(child);\n      }\n    }\n  }\n}\n\nfloat calculateAvailableInnerDimension(\n    const yoga::Node* const node,\n    const Direction direction,\n    const Dimension dimension,\n    const float availableDim,\n    const float paddingAndBorder,\n    const float ownerDim,\n    const float ownerWidth) {\n  float availableInnerDim = availableDim - paddingAndBorder;\n  // Max dimension overrides predefined dimension value; Min dimension in turn\n  // overrides both of the above\n  if (yoga::isDefined(availableInnerDim)) {\n    // We want to make sure our available height does not violate min and max\n    // constraints\n    const FloatOptional minDimensionOptional =\n        node->style().resolvedMinDimension(\n            direction, dimension, ownerDim, ownerWidth);\n    const float minInnerDim = minDimensionOptional.isUndefined()\n        ? 0.0f\n        : minDimensionOptional.unwrap() - paddingAndBorder;\n\n    const FloatOptional maxDimensionOptional =\n        node->style().resolvedMaxDimension(\n            direction, dimension, ownerDim, ownerWidth);\n\n    const float maxInnerDim = maxDimensionOptional.isUndefined()\n        ? FLT_MAX\n        : maxDimensionOptional.unwrap() - paddingAndBorder;\n    availableInnerDim = yoga::maxOrDefined(\n        yoga::minOrDefined(availableInnerDim, maxInnerDim), minInnerDim);\n  }\n\n  return availableInnerDim;\n}\n\nstatic float computeFlexBasisForChildren(\n    yoga::Node* const node,\n    const float availableInnerWidth,\n    const float availableInnerHeight,\n    const float ownerWidth,\n    const float ownerHeight,\n    SizingMode widthSizingMode,\n    SizingMode heightSizingMode,\n    Direction direction,\n    FlexDirection mainAxis,\n    bool performLayout,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  float totalOuterFlexBasis = 0.0f;\n  YGNodeRef singleFlexChild = nullptr;\n  auto children = node->getLayoutChildren();\n  SizingMode sizingModeMainDim =\n      isRow(mainAxis) ? widthSizingMode : heightSizingMode;\n  // If there is only one child with flexGrow + flexShrink it means we can set\n  // the computedFlexBasis to 0 instead of measuring and shrinking / flexing the\n  // child to exactly match the remaining space\n  if (sizingModeMainDim == SizingMode::StretchFit) {\n    for (auto child : children) {\n      if (child->isNodeFlexible()) {\n        if (singleFlexChild != nullptr ||\n            yoga::inexactEquals(child->resolveFlexGrow(), 0.0f) ||\n            yoga::inexactEquals(child->resolveFlexShrink(), 0.0f)) {\n          // There is already a flexible child, or this flexible child doesn't\n          // have flexGrow and flexShrink, abort\n          singleFlexChild = nullptr;\n          break;\n        } else {\n          singleFlexChild = child;\n        }\n      }\n    }\n  }\n\n  for (auto child : children) {\n    child->processDimensions();\n    if (child->style().display() == Display::None) {\n      zeroOutLayoutRecursively(child);\n      child->setHasNewLayout(true);\n      child->setDirty(false);\n      continue;\n    }\n    if (performLayout) {\n      // Set the initial position (relative to the owner).\n      const Direction childDirection = child->resolveDirection(direction);\n      child->setPosition(\n          childDirection, availableInnerWidth, availableInnerHeight);\n    }\n\n    if (child->style().positionType() == PositionType::Absolute) {\n      continue;\n    }\n    if (child == singleFlexChild) {\n      child->setLayoutComputedFlexBasisGeneration(generationCount);\n      child->setLayoutComputedFlexBasis(FloatOptional(0));\n    } else {\n      computeFlexBasisForChild(\n          node,\n          child,\n          availableInnerWidth,\n          widthSizingMode,\n          availableInnerHeight,\n          ownerWidth,\n          ownerHeight,\n          heightSizingMode,\n          direction,\n          layoutMarkerData,\n          depth,\n          generationCount);\n    }\n\n    totalOuterFlexBasis +=\n        (child->getLayout().computedFlexBasis.unwrap() +\n         child->style().computeMarginForAxis(mainAxis, availableInnerWidth));\n  }\n\n  return totalOuterFlexBasis;\n}\n\n// It distributes the free space to the flexible items and ensures that the size\n// of the flex items abide the min and max constraints. At the end of this\n// function the child nodes would have proper size. Prior using this function\n// please ensure that distributeFreeSpaceFirstPass is called.\nstatic float distributeFreeSpaceSecondPass(\n    FlexLine& flexLine,\n    yoga::Node* const node,\n    const FlexDirection mainAxis,\n    const FlexDirection crossAxis,\n    const Direction direction,\n    const float ownerWidth,\n    const float mainAxisOwnerSize,\n    const float availableInnerMainDim,\n    const float availableInnerCrossDim,\n    const float availableInnerWidth,\n    const float availableInnerHeight,\n    const bool mainAxisOverflows,\n    const SizingMode sizingModeCrossDim,\n    const bool performLayout,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  float childFlexBasis = 0;\n  float flexShrinkScaledFactor = 0;\n  float flexGrowFactor = 0;\n  float deltaFreeSpace = 0;\n  const bool isMainAxisRow = isRow(mainAxis);\n  const bool isNodeFlexWrap = node->style().flexWrap() != Wrap::NoWrap;\n\n  for (auto currentLineChild : flexLine.itemsInFlow) {\n    childFlexBasis = boundAxisWithinMinAndMax(\n                         currentLineChild,\n                         direction,\n                         mainAxis,\n                         currentLineChild->getLayout().computedFlexBasis,\n                         mainAxisOwnerSize,\n                         ownerWidth)\n                         .unwrap();\n    float updatedMainSize = childFlexBasis;\n\n    if (yoga::isDefined(flexLine.layout.remainingFreeSpace) &&\n        flexLine.layout.remainingFreeSpace < 0) {\n      flexShrinkScaledFactor =\n          -currentLineChild->resolveFlexShrink() * childFlexBasis;\n      // Is this child able to shrink?\n      if (flexShrinkScaledFactor != 0) {\n        float childSize = YGUndefined;\n\n        if (yoga::isDefined(flexLine.layout.totalFlexShrinkScaledFactors) &&\n            flexLine.layout.totalFlexShrinkScaledFactors == 0) {\n          childSize = childFlexBasis + flexShrinkScaledFactor;\n        } else {\n          childSize = childFlexBasis +\n              (flexLine.layout.remainingFreeSpace /\n               flexLine.layout.totalFlexShrinkScaledFactors) *\n                  flexShrinkScaledFactor;\n        }\n\n        updatedMainSize = boundAxis(\n            currentLineChild,\n            mainAxis,\n            direction,\n            childSize,\n            availableInnerMainDim,\n            availableInnerWidth);\n      }\n    } else if (\n        yoga::isDefined(flexLine.layout.remainingFreeSpace) &&\n        flexLine.layout.remainingFreeSpace > 0) {\n      flexGrowFactor = currentLineChild->resolveFlexGrow();\n\n      // Is this child able to grow?\n      if (!std::isnan(flexGrowFactor) && flexGrowFactor != 0) {\n        updatedMainSize = boundAxis(\n            currentLineChild,\n            mainAxis,\n            direction,\n            childFlexBasis +\n                flexLine.layout.remainingFreeSpace /\n                    flexLine.layout.totalFlexGrowFactors * flexGrowFactor,\n            availableInnerMainDim,\n            availableInnerWidth);\n      }\n    }\n\n    deltaFreeSpace += updatedMainSize - childFlexBasis;\n\n    const float marginMain = currentLineChild->style().computeMarginForAxis(\n        mainAxis, availableInnerWidth);\n    const float marginCross = currentLineChild->style().computeMarginForAxis(\n        crossAxis, availableInnerWidth);\n\n    float childCrossSize = YGUndefined;\n    float childMainSize = updatedMainSize + marginMain;\n    SizingMode childCrossSizingMode;\n    SizingMode childMainSizingMode = SizingMode::StretchFit;\n\n    const auto& childStyle = currentLineChild->style();\n    if (childStyle.aspectRatio().isDefined()) {\n      childCrossSize = isMainAxisRow\n          ? (childMainSize - marginMain) / childStyle.aspectRatio().unwrap()\n          : (childMainSize - marginMain) * childStyle.aspectRatio().unwrap();\n      childCrossSizingMode = SizingMode::StretchFit;\n\n      childCrossSize += marginCross;\n    } else if (\n        !std::isnan(availableInnerCrossDim) &&\n        !currentLineChild->hasDefiniteLength(\n            dimension(crossAxis), availableInnerCrossDim) &&\n        sizingModeCrossDim == SizingMode::StretchFit &&\n        !(isNodeFlexWrap && mainAxisOverflows) &&\n        resolveChildAlignment(node, currentLineChild) == Align::Stretch &&\n        !currentLineChild->style().flexStartMarginIsAuto(\n            crossAxis, direction) &&\n        !currentLineChild->style().flexEndMarginIsAuto(crossAxis, direction)) {\n      childCrossSize = availableInnerCrossDim;\n      childCrossSizingMode = SizingMode::StretchFit;\n    } else if (!currentLineChild->hasDefiniteLength(\n                   dimension(crossAxis), availableInnerCrossDim)) {\n      childCrossSize = availableInnerCrossDim;\n      childCrossSizingMode = yoga::isUndefined(childCrossSize)\n          ? SizingMode::MaxContent\n          : SizingMode::FitContent;\n    } else {\n      childCrossSize = currentLineChild\n                           ->getResolvedDimension(\n                               direction,\n                               dimension(crossAxis),\n                               availableInnerCrossDim,\n                               availableInnerWidth)\n                           .unwrap() +\n          marginCross;\n      const bool isLoosePercentageMeasurement =\n          currentLineChild->getProcessedDimension(dimension(crossAxis))\n              .isPercent() &&\n          sizingModeCrossDim != SizingMode::StretchFit;\n      childCrossSizingMode =\n          yoga::isUndefined(childCrossSize) || isLoosePercentageMeasurement\n          ? SizingMode::MaxContent\n          : SizingMode::StretchFit;\n    }\n\n    constrainMaxSizeForMode(\n        currentLineChild,\n        direction,\n        mainAxis,\n        availableInnerMainDim,\n        availableInnerWidth,\n        &childMainSizingMode,\n        &childMainSize);\n    constrainMaxSizeForMode(\n        currentLineChild,\n        direction,\n        crossAxis,\n        availableInnerCrossDim,\n        availableInnerWidth,\n        &childCrossSizingMode,\n        &childCrossSize);\n\n    const bool requiresStretchLayout =\n        !currentLineChild->hasDefiniteLength(\n            dimension(crossAxis), availableInnerCrossDim) &&\n        resolveChildAlignment(node, currentLineChild) == Align::Stretch &&\n        !currentLineChild->style().flexStartMarginIsAuto(\n            crossAxis, direction) &&\n        !currentLineChild->style().flexEndMarginIsAuto(crossAxis, direction);\n\n    const float childWidth = isMainAxisRow ? childMainSize : childCrossSize;\n    const float childHeight = !isMainAxisRow ? childMainSize : childCrossSize;\n\n    const SizingMode childWidthSizingMode =\n        isMainAxisRow ? childMainSizingMode : childCrossSizingMode;\n    const SizingMode childHeightSizingMode =\n        !isMainAxisRow ? childMainSizingMode : childCrossSizingMode;\n\n    const bool isLayoutPass = performLayout && !requiresStretchLayout;\n    // Recursively call the layout algorithm for this child with the updated\n    // main size.\n    calculateLayoutInternal(\n        currentLineChild,\n        childWidth,\n        childHeight,\n        node->getLayout().direction(),\n        childWidthSizingMode,\n        childHeightSizingMode,\n        availableInnerWidth,\n        availableInnerHeight,\n        isLayoutPass,\n        isLayoutPass ? LayoutPassReason::kFlexLayout\n                     : LayoutPassReason::kFlexMeasure,\n        layoutMarkerData,\n        depth,\n        generationCount);\n    node->setLayoutHadOverflow(\n        node->getLayout().hadOverflow() ||\n        currentLineChild->getLayout().hadOverflow());\n  }\n  return deltaFreeSpace;\n}\n\n// It distributes the free space to the flexible items.For those flexible items\n// whose min and max constraints are triggered, those flex item's clamped size\n// is removed from the remaingfreespace.\nstatic void distributeFreeSpaceFirstPass(\n    FlexLine& flexLine,\n    const Direction direction,\n    const FlexDirection mainAxis,\n    const float ownerWidth,\n    const float mainAxisOwnerSize,\n    const float availableInnerMainDim,\n    const float availableInnerWidth) {\n  float flexShrinkScaledFactor = 0;\n  float flexGrowFactor = 0;\n  float baseMainSize = 0;\n  float boundMainSize = 0;\n  float deltaFreeSpace = 0;\n\n  for (auto currentLineChild : flexLine.itemsInFlow) {\n    float childFlexBasis = boundAxisWithinMinAndMax(\n                               currentLineChild,\n                               direction,\n                               mainAxis,\n                               currentLineChild->getLayout().computedFlexBasis,\n                               mainAxisOwnerSize,\n                               ownerWidth)\n                               .unwrap();\n\n    if (flexLine.layout.remainingFreeSpace < 0) {\n      flexShrinkScaledFactor =\n          -currentLineChild->resolveFlexShrink() * childFlexBasis;\n\n      // Is this child able to shrink?\n      if (yoga::isDefined(flexShrinkScaledFactor) &&\n          flexShrinkScaledFactor != 0) {\n        baseMainSize = childFlexBasis +\n            flexLine.layout.remainingFreeSpace /\n                flexLine.layout.totalFlexShrinkScaledFactors *\n                flexShrinkScaledFactor;\n        boundMainSize = boundAxis(\n            currentLineChild,\n            mainAxis,\n            direction,\n            baseMainSize,\n            availableInnerMainDim,\n            availableInnerWidth);\n        if (yoga::isDefined(baseMainSize) && yoga::isDefined(boundMainSize) &&\n            baseMainSize != boundMainSize) {\n          // By excluding this item's size and flex factor from remaining, this\n          // item's min/max constraints should also trigger in the second pass\n          // resulting in the item's size calculation being identical in the\n          // first and second passes.\n          deltaFreeSpace += boundMainSize - childFlexBasis;\n          flexLine.layout.totalFlexShrinkScaledFactors -=\n              (-currentLineChild->resolveFlexShrink() *\n               currentLineChild->getLayout().computedFlexBasis.unwrap());\n        }\n      }\n    } else if (\n        yoga::isDefined(flexLine.layout.remainingFreeSpace) &&\n        flexLine.layout.remainingFreeSpace > 0) {\n      flexGrowFactor = currentLineChild->resolveFlexGrow();\n\n      // Is this child able to grow?\n      if (yoga::isDefined(flexGrowFactor) && flexGrowFactor != 0) {\n        baseMainSize = childFlexBasis +\n            flexLine.layout.remainingFreeSpace /\n                flexLine.layout.totalFlexGrowFactors * flexGrowFactor;\n        boundMainSize = boundAxis(\n            currentLineChild,\n            mainAxis,\n            direction,\n            baseMainSize,\n            availableInnerMainDim,\n            availableInnerWidth);\n\n        if (yoga::isDefined(baseMainSize) && yoga::isDefined(boundMainSize) &&\n            baseMainSize != boundMainSize) {\n          // By excluding this item's size and flex factor from remaining, this\n          // item's min/max constraints should also trigger in the second pass\n          // resulting in the item's size calculation being identical in the\n          // first and second passes.\n          deltaFreeSpace += boundMainSize - childFlexBasis;\n          flexLine.layout.totalFlexGrowFactors -= flexGrowFactor;\n        }\n      }\n    }\n  }\n  flexLine.layout.remainingFreeSpace -= deltaFreeSpace;\n}\n\n// Do two passes over the flex items to figure out how to distribute the\n// remaining space.\n//\n// The first pass finds the items whose min/max constraints trigger, freezes\n// them at those sizes, and excludes those sizes from the remaining space.\n//\n// The second pass sets the size of each flexible item. It distributes the\n// remaining space amongst the items whose min/max constraints didn't trigger in\n// the first pass. For the other items, it sets their sizes by forcing their\n// min/max constraints to trigger again.\n//\n// This two pass approach for resolving min/max constraints deviates from the\n// spec. The spec\n// (https://www.w3.org/TR/CSS-flexbox-1/#resolve-flexible-lengths) describes a\n// process that needs to be repeated a variable number of times. The algorithm\n// implemented here won't handle all cases but it was simpler to implement and\n// it mitigates performance concerns because we know exactly how many passes\n// it'll do.\n//\n// At the end of this function the child nodes would have the proper size\n// assigned to them.\n//\nstatic void resolveFlexibleLength(\n    yoga::Node* const node,\n    FlexLine& flexLine,\n    const FlexDirection mainAxis,\n    const FlexDirection crossAxis,\n    const Direction direction,\n    const float ownerWidth,\n    const float mainAxisOwnerSize,\n    const float availableInnerMainDim,\n    const float availableInnerCrossDim,\n    const float availableInnerWidth,\n    const float availableInnerHeight,\n    const bool mainAxisOverflows,\n    const SizingMode sizingModeCrossDim,\n    const bool performLayout,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  const float originalFreeSpace = flexLine.layout.remainingFreeSpace;\n  // First pass: detect the flex items whose min/max constraints trigger\n  distributeFreeSpaceFirstPass(\n      flexLine,\n      direction,\n      mainAxis,\n      ownerWidth,\n      mainAxisOwnerSize,\n      availableInnerMainDim,\n      availableInnerWidth);\n\n  // Second pass: resolve the sizes of the flexible items\n  const float distributedFreeSpace = distributeFreeSpaceSecondPass(\n      flexLine,\n      node,\n      mainAxis,\n      crossAxis,\n      direction,\n      ownerWidth,\n      mainAxisOwnerSize,\n      availableInnerMainDim,\n      availableInnerCrossDim,\n      availableInnerWidth,\n      availableInnerHeight,\n      mainAxisOverflows,\n      sizingModeCrossDim,\n      performLayout,\n      layoutMarkerData,\n      depth,\n      generationCount);\n\n  flexLine.layout.remainingFreeSpace = originalFreeSpace - distributedFreeSpace;\n}\n\nstatic void justifyMainAxis(\n    yoga::Node* const node,\n    FlexLine& flexLine,\n    const FlexDirection mainAxis,\n    const FlexDirection crossAxis,\n    const Direction direction,\n    const SizingMode sizingModeMainDim,\n    const SizingMode sizingModeCrossDim,\n    const float mainAxisOwnerSize,\n    const float ownerWidth,\n    const float availableInnerMainDim,\n    const float availableInnerCrossDim,\n    const float availableInnerWidth,\n    const bool performLayout) {\n  const auto& style = node->style();\n\n  const float leadingPaddingAndBorderMain =\n      node->style().computeFlexStartPaddingAndBorder(\n          mainAxis, direction, ownerWidth);\n  const float trailingPaddingAndBorderMain =\n      node->style().computeFlexEndPaddingAndBorder(\n          mainAxis, direction, ownerWidth);\n\n  const float gap =\n      node->style().computeGapForAxis(mainAxis, availableInnerMainDim);\n  // If we are using \"at most\" rules in the main axis, make sure that\n  // remainingFreeSpace is 0 when min main dimension is not given\n  if (sizingModeMainDim == SizingMode::FitContent &&\n      flexLine.layout.remainingFreeSpace > 0) {\n    if (style.minDimension(dimension(mainAxis)).isDefined() &&\n        style\n            .resolvedMinDimension(\n                direction, dimension(mainAxis), mainAxisOwnerSize, ownerWidth)\n            .isDefined()) {\n      // This condition makes sure that if the size of main dimension(after\n      // considering child nodes main dim, leading and trailing padding etc)\n      // falls below min dimension, then the remainingFreeSpace is reassigned\n      // considering the min dimension\n\n      // `minAvailableMainDim` denotes minimum available space in which child\n      // can be laid out, it will exclude space consumed by padding and border.\n      const float minAvailableMainDim =\n          style\n              .resolvedMinDimension(\n                  direction, dimension(mainAxis), mainAxisOwnerSize, ownerWidth)\n              .unwrap() -\n          leadingPaddingAndBorderMain - trailingPaddingAndBorderMain;\n      const float occupiedSpaceByChildNodes =\n          availableInnerMainDim - flexLine.layout.remainingFreeSpace;\n      flexLine.layout.remainingFreeSpace = yoga::maxOrDefined(\n          0.0f, minAvailableMainDim - occupiedSpaceByChildNodes);\n    } else {\n      flexLine.layout.remainingFreeSpace = 0;\n    }\n  }\n\n  // In order to position the elements in the main axis, we have two controls.\n  // The space between the beginning and the first element and the space between\n  // each two elements.\n  float leadingMainDim = 0;\n  float betweenMainDim = gap;\n  const Justify justifyContent = flexLine.layout.remainingFreeSpace >= 0\n      ? node->style().justifyContent()\n      : fallbackAlignment(node->style().justifyContent());\n\n  if (flexLine.numberOfAutoMargins == 0) {\n    switch (justifyContent) {\n      case Justify::Start:\n      case Justify::End:\n      case Justify::Auto:\n        // No-Op\n        break;\n      case Justify::Stretch:\n        // No-Op\n        break;\n      case Justify::Center:\n        leadingMainDim = flexLine.layout.remainingFreeSpace / 2;\n        break;\n      case Justify::FlexEnd:\n        leadingMainDim = flexLine.layout.remainingFreeSpace;\n        break;\n      case Justify::SpaceBetween:\n        if (flexLine.itemsInFlow.size() > 1) {\n          betweenMainDim += flexLine.layout.remainingFreeSpace /\n              static_cast<float>(flexLine.itemsInFlow.size() - 1);\n        }\n        break;\n      case Justify::SpaceEvenly:\n        // Space is distributed evenly across all elements\n        leadingMainDim = flexLine.layout.remainingFreeSpace /\n            static_cast<float>(flexLine.itemsInFlow.size() + 1);\n        betweenMainDim += leadingMainDim;\n        break;\n      case Justify::SpaceAround:\n        // Space on the edges is half of the space between elements\n        leadingMainDim = 0.5f * flexLine.layout.remainingFreeSpace /\n            static_cast<float>(flexLine.itemsInFlow.size());\n        betweenMainDim += leadingMainDim * 2;\n        break;\n      case Justify::FlexStart:\n        break;\n    }\n  }\n\n  flexLine.layout.mainDim = leadingPaddingAndBorderMain + leadingMainDim;\n  flexLine.layout.crossDim = 0;\n\n  float maxAscentForCurrentLine = 0;\n  float maxDescentForCurrentLine = 0;\n  bool isNodeBaselineLayout = isBaselineLayout(node);\n  for (auto child : flexLine.itemsInFlow) {\n    const LayoutResults& childLayout = child->getLayout();\n    if (child->style().flexStartMarginIsAuto(mainAxis, direction) &&\n        flexLine.layout.remainingFreeSpace > 0.0f) {\n      flexLine.layout.mainDim += flexLine.layout.remainingFreeSpace /\n          static_cast<float>(flexLine.numberOfAutoMargins);\n    }\n\n    if (performLayout) {\n      child->setLayoutPosition(\n          childLayout.position(flexStartEdge(mainAxis)) +\n              flexLine.layout.mainDim,\n          flexStartEdge(mainAxis));\n    }\n\n    if (child != flexLine.itemsInFlow.back()) {\n      flexLine.layout.mainDim += betweenMainDim;\n    }\n\n    if (child->style().flexEndMarginIsAuto(mainAxis, direction) &&\n        flexLine.layout.remainingFreeSpace > 0.0f) {\n      flexLine.layout.mainDim += flexLine.layout.remainingFreeSpace /\n          static_cast<float>(flexLine.numberOfAutoMargins);\n    }\n    bool canSkipFlex =\n        !performLayout && sizingModeCrossDim == SizingMode::StretchFit;\n    if (canSkipFlex) {\n      // If we skipped the flex step, then we can't rely on the measuredDims\n      // because they weren't computed. This means we can't call\n      // dimensionWithMargin.\n      flexLine.layout.mainDim +=\n          child->style().computeMarginForAxis(mainAxis, availableInnerWidth) +\n          childLayout.computedFlexBasis.unwrap();\n      flexLine.layout.crossDim = availableInnerCrossDim;\n    } else {\n      // The main dimension is the sum of all the elements dimension plus\n      // the spacing.\n      flexLine.layout.mainDim +=\n          child->dimensionWithMargin(mainAxis, availableInnerWidth);\n\n      if (isNodeBaselineLayout) {\n        // If the child is baseline aligned then the cross dimension is\n        // calculated by adding maxAscent and maxDescent from the baseline.\n        const float ascent = calculateBaseline(child) +\n            child->style().computeFlexStartMargin(\n                FlexDirection::Column, direction, availableInnerWidth);\n        const float descent =\n            child->getLayout().measuredDimension(Dimension::Height) +\n            child->style().computeMarginForAxis(\n                FlexDirection::Column, availableInnerWidth) -\n            ascent;\n\n        maxAscentForCurrentLine =\n            yoga::maxOrDefined(maxAscentForCurrentLine, ascent);\n        maxDescentForCurrentLine =\n            yoga::maxOrDefined(maxDescentForCurrentLine, descent);\n      } else {\n        // The cross dimension is the max of the elements dimension since\n        // there can only be one element in that cross dimension in the case\n        // when the items are not baseline aligned\n        flexLine.layout.crossDim = yoga::maxOrDefined(\n            flexLine.layout.crossDim,\n            child->dimensionWithMargin(crossAxis, availableInnerWidth));\n      }\n    }\n  }\n  flexLine.layout.mainDim += trailingPaddingAndBorderMain;\n\n  if (isNodeBaselineLayout) {\n    flexLine.layout.crossDim =\n        maxAscentForCurrentLine + maxDescentForCurrentLine;\n  }\n}\n\n//\n// This is the main routine that implements a subset of the flexbox layout\n// algorithm described in the W3C CSS documentation:\n// https://www.w3.org/TR/CSS3-flexbox/.\n//\n// Limitations of this algorithm, compared to the full standard:\n//  * Display property is always assumed to be 'flex' except for Text nodes,\n//    which are assumed to be 'inline-flex'.\n//  * The 'zIndex' property (or any form of z ordering) is not supported. Nodes\n//    are stacked in document order.\n//  * The 'order' property is not supported. The order of flex items is always\n//    defined by document order.\n//  * The 'visibility' property is always assumed to be 'visible'. Values of\n//    'collapse' and 'hidden' are not supported.\n//  * There is no support for forced breaks.\n//  * It does not support vertical inline directions (top-to-bottom or\n//    bottom-to-top text).\n//\n// Deviations from standard:\n//  * Section 4.5 of the spec indicates that all flex items have a default\n//    minimum main size. For text blocks, for example, this is the width of the\n//    widest word. Calculating the minimum width is expensive, so we forego it\n//    and assume a default minimum main size of 0.\n//  * Min/Max sizes in the main axis are not honored when resolving flexible\n//    lengths.\n//  * The spec indicates that the default value for 'flexDirection' is 'row',\n//    but the algorithm below assumes a default of 'column'.\n//\n// Input parameters:\n//    - node: current node to be sized and laid out\n//    - availableWidth & availableHeight: available size to be used for sizing\n//      the node or YGUndefined if the size is not available; interpretation\n//      depends on layout flags\n//    - ownerDirection: the inline (text) direction within the owner\n//      (left-to-right or right-to-left)\n//    - widthSizingMode: indicates the sizing rules for the width (see below\n//      for explanation)\n//    - heightSizingMode: indicates the sizing rules for the height (see below\n//      for explanation)\n//    - performLayout: specifies whether the caller is interested in just the\n//      dimensions of the node or it requires the entire node and its subtree to\n//      be laid out (with final positions)\n//\n// Details:\n//    This routine is called recursively to lay out subtrees of flexbox\n//    elements. It uses the information in node.style, which is treated as a\n//    read-only input. It is responsible for setting the layout.direction and\n//    layout.measuredDimensions fields for the input node as well as the\n//    layout.position and layout.lineIndex fields for its child nodes. The\n//    layout.measuredDimensions field includes any border or padding for the\n//    node but does not include margins.\n//\n//    When calling calculateLayoutImpl and calculateLayoutInternal, if the\n//    caller passes an available size of undefined then it must also pass a\n//    measure mode of SizingMode::MaxContent in that dimension.\n//\nstatic void calculateLayoutImpl(\n    yoga::Node* const node,\n    const float availableWidth,\n    const float availableHeight,\n    const Direction ownerDirection,\n    const SizingMode widthSizingMode,\n    const SizingMode heightSizingMode,\n    const float ownerWidth,\n    const float ownerHeight,\n    const bool performLayout,\n    const LayoutPassReason reason,\n    LayoutData& layoutMarkerData,\n    const uint32_t depth,\n    const uint32_t generationCount) {\n  yoga::assertFatalWithNode(\n      node,\n      yoga::isUndefined(availableWidth)\n          ? widthSizingMode == SizingMode::MaxContent\n          : true,\n      \"availableWidth is indefinite so widthSizingMode must be \"\n      \"SizingMode::MaxContent\");\n  yoga::assertFatalWithNode(\n      node,\n      yoga::isUndefined(availableHeight)\n          ? heightSizingMode == SizingMode::MaxContent\n          : true,\n      \"availableHeight is indefinite so heightSizingMode must be \"\n      \"SizingMode::MaxContent\");\n\n  (performLayout ? layoutMarkerData.layouts : layoutMarkerData.measures) += 1;\n\n  // Set the resolved resolution in the node's layout.\n  const Direction direction = node->resolveDirection(ownerDirection);\n  node->setLayoutDirection(direction);\n\n  const FlexDirection flexRowDirection =\n      resolveDirection(FlexDirection::Row, direction);\n  const FlexDirection flexColumnDirection =\n      resolveDirection(FlexDirection::Column, direction);\n\n  const auto startEdge =\n      direction == Direction::LTR ? PhysicalEdge::Left : PhysicalEdge::Right;\n  const auto endEdge =\n      direction == Direction::LTR ? PhysicalEdge::Right : PhysicalEdge::Left;\n\n  const float marginRowLeading = node->style().computeInlineStartMargin(\n      flexRowDirection, direction, ownerWidth);\n  node->setLayoutMargin(marginRowLeading, startEdge);\n  const float marginRowTrailing = node->style().computeInlineEndMargin(\n      flexRowDirection, direction, ownerWidth);\n  node->setLayoutMargin(marginRowTrailing, endEdge);\n  const float marginColumnLeading = node->style().computeInlineStartMargin(\n      flexColumnDirection, direction, ownerWidth);\n  node->setLayoutMargin(marginColumnLeading, PhysicalEdge::Top);\n  const float marginColumnTrailing = node->style().computeInlineEndMargin(\n      flexColumnDirection, direction, ownerWidth);\n  node->setLayoutMargin(marginColumnTrailing, PhysicalEdge::Bottom);\n\n  const float marginAxisRow = marginRowLeading + marginRowTrailing;\n  const float marginAxisColumn = marginColumnLeading + marginColumnTrailing;\n\n  node->setLayoutBorder(\n      node->style().computeInlineStartBorder(flexRowDirection, direction),\n      startEdge);\n  node->setLayoutBorder(\n      node->style().computeInlineEndBorder(flexRowDirection, direction),\n      endEdge);\n  node->setLayoutBorder(\n      node->style().computeInlineStartBorder(flexColumnDirection, direction),\n      PhysicalEdge::Top);\n  node->setLayoutBorder(\n      node->style().computeInlineEndBorder(flexColumnDirection, direction),\n      PhysicalEdge::Bottom);\n\n  node->setLayoutPadding(\n      node->style().computeInlineStartPadding(\n          flexRowDirection, direction, ownerWidth),\n      startEdge);\n  node->setLayoutPadding(\n      node->style().computeInlineEndPadding(\n          flexRowDirection, direction, ownerWidth),\n      endEdge);\n  node->setLayoutPadding(\n      node->style().computeInlineStartPadding(\n          flexColumnDirection, direction, ownerWidth),\n      PhysicalEdge::Top);\n  node->setLayoutPadding(\n      node->style().computeInlineEndPadding(\n          flexColumnDirection, direction, ownerWidth),\n      PhysicalEdge::Bottom);\n\n  if (node->hasMeasureFunc()) {\n    measureNodeWithMeasureFunc(\n        node,\n        direction,\n        availableWidth - marginAxisRow,\n        availableHeight - marginAxisColumn,\n        widthSizingMode,\n        heightSizingMode,\n        ownerWidth,\n        ownerHeight,\n        layoutMarkerData,\n        reason);\n\n    // Clean and update all display: contents nodes with a direct path to the\n    // current node as they will not be traversed\n    cleanupContentsNodesRecursively(node);\n    return;\n  }\n\n  const auto childCount = node->getLayoutChildCount();\n  if (childCount == 0) {\n    measureNodeWithoutChildren(\n        node,\n        direction,\n        availableWidth - marginAxisRow,\n        availableHeight - marginAxisColumn,\n        widthSizingMode,\n        heightSizingMode,\n        ownerWidth,\n        ownerHeight);\n\n    // Clean and update all display: contents nodes with a direct path to the\n    // current node as they will not be traversed\n    cleanupContentsNodesRecursively(node);\n    return;\n  }\n\n  // If we're not being asked to perform a full layout we can skip the algorithm\n  // if we already know the size\n  if (!performLayout &&\n      measureNodeWithFixedSize(\n          node,\n          direction,\n          availableWidth - marginAxisRow,\n          availableHeight - marginAxisColumn,\n          widthSizingMode,\n          heightSizingMode,\n          ownerWidth,\n          ownerHeight)) {\n    // Clean and update all display: contents nodes with a direct path to the\n    // current node as they will not be traversed\n    cleanupContentsNodesRecursively(node);\n    return;\n  }\n\n  // At this point we know we're going to perform work. Ensure that each child\n  // has a mutable copy.\n  node->cloneChildrenIfNeeded();\n  // Reset layout flags, as they could have changed.\n  node->setLayoutHadOverflow(false);\n\n  // Clean and update all display: contents nodes with a direct path to the\n  // current node as they will not be traversed\n  cleanupContentsNodesRecursively(node);\n\n  // STEP 1: CALCULATE VALUES FOR REMAINDER OF ALGORITHM\n  const FlexDirection mainAxis =\n      resolveDirection(node->style().flexDirection(), direction);\n  const FlexDirection crossAxis = resolveCrossDirection(mainAxis, direction);\n  const bool isMainAxisRow = isRow(mainAxis);\n  const bool isNodeFlexWrap = node->style().flexWrap() != Wrap::NoWrap;\n\n  const float mainAxisOwnerSize = isMainAxisRow ? ownerWidth : ownerHeight;\n  const float crossAxisOwnerSize = isMainAxisRow ? ownerHeight : ownerWidth;\n\n  const float paddingAndBorderAxisMain =\n      paddingAndBorderForAxis(node, mainAxis, direction, ownerWidth);\n  const float paddingAndBorderAxisCross =\n      paddingAndBorderForAxis(node, crossAxis, direction, ownerWidth);\n  const float leadingPaddingAndBorderCross =\n      node->style().computeFlexStartPaddingAndBorder(\n          crossAxis, direction, ownerWidth);\n\n  SizingMode sizingModeMainDim =\n      isMainAxisRow ? widthSizingMode : heightSizingMode;\n  SizingMode sizingModeCrossDim =\n      isMainAxisRow ? heightSizingMode : widthSizingMode;\n\n  const float paddingAndBorderAxisRow =\n      isMainAxisRow ? paddingAndBorderAxisMain : paddingAndBorderAxisCross;\n  const float paddingAndBorderAxisColumn =\n      isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain;\n\n  // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS\n\n  float availableInnerWidth = calculateAvailableInnerDimension(\n      node,\n      direction,\n      Dimension::Width,\n      availableWidth - marginAxisRow,\n      paddingAndBorderAxisRow,\n      ownerWidth,\n      ownerWidth);\n  float availableInnerHeight = calculateAvailableInnerDimension(\n      node,\n      direction,\n      Dimension::Height,\n      availableHeight - marginAxisColumn,\n      paddingAndBorderAxisColumn,\n      ownerHeight,\n      ownerWidth);\n\n  float availableInnerMainDim =\n      isMainAxisRow ? availableInnerWidth : availableInnerHeight;\n  const float availableInnerCrossDim =\n      isMainAxisRow ? availableInnerHeight : availableInnerWidth;\n\n  // STEP 3: DETERMINE FLEX BASIS FOR EACH ITEM\n\n  // When this node is measured with MaxContent (FixFlexBasisFitContent\n  // behavior), availableInnerHeight is NaN.\n  // To preserve percentage resolution for descendants, derive a definite\n  // owner-size from the parent-provided ownerHeight.\n  float ownerWidthForChildren = availableInnerWidth;\n  float ownerHeightForChildren = availableInnerHeight;\n\n  if (node->getConfig()->isExperimentalFeatureEnabled(\n          ExperimentalFeature::FixFlexBasisFitContent)) {\n    const auto* owner = node->getOwner();\n    const bool isChildOfScrollContainer =\n        owner != nullptr && owner->style().overflow() == Overflow::Scroll;\n\n    if (!isChildOfScrollContainer) {\n      if (yoga::isUndefined(ownerWidthForChildren) &&\n          yoga::isDefined(ownerWidth)) {\n        ownerWidthForChildren = calculateAvailableInnerDimension(\n            node,\n            direction,\n            Dimension::Width,\n            ownerWidth - marginAxisRow,\n            paddingAndBorderAxisRow,\n            ownerWidth,\n            ownerWidth);\n      }\n      if (yoga::isUndefined(ownerHeightForChildren) &&\n          yoga::isDefined(ownerHeight)) {\n        ownerHeightForChildren = calculateAvailableInnerDimension(\n            node,\n            direction,\n            Dimension::Height,\n            ownerHeight - marginAxisColumn,\n            paddingAndBorderAxisColumn,\n            ownerHeight,\n            ownerWidth);\n      }\n    }\n  }\n\n  // Computed basis + margins + gap\n  float totalMainDim = 0;\n  totalMainDim += computeFlexBasisForChildren(\n      node,\n      availableInnerWidth,\n      availableInnerHeight,\n      ownerWidthForChildren,\n      ownerHeightForChildren,\n      widthSizingMode,\n      heightSizingMode,\n      direction,\n      mainAxis,\n      performLayout,\n      layoutMarkerData,\n      depth,\n      generationCount);\n\n  if (childCount > 1) {\n    totalMainDim +=\n        node->style().computeGapForAxis(mainAxis, availableInnerMainDim) *\n        static_cast<float>(childCount - 1);\n  }\n\n  const bool mainAxisOverflows =\n      (sizingModeMainDim != SizingMode::MaxContent) &&\n      totalMainDim > availableInnerMainDim;\n\n  if (isNodeFlexWrap && mainAxisOverflows &&\n      sizingModeMainDim == SizingMode::FitContent) {\n    sizingModeMainDim = SizingMode::StretchFit;\n  }\n  // STEP 4: COLLECT FLEX ITEMS INTO FLEX LINES\n\n  // Iterator representing the beginning of the current line\n  Node::LayoutableChildren::Iterator startOfLineIterator =\n      node->getLayoutChildren().begin();\n\n  // Number of lines.\n  size_t lineCount = 0;\n\n  // Accumulated cross dimensions of all lines so far.\n  float totalLineCrossDim = 0;\n\n  const float crossAxisGap =\n      node->style().computeGapForAxis(crossAxis, availableInnerCrossDim);\n\n  // Max main dimension of all the lines.\n  float maxLineMainDim = 0;\n  for (; startOfLineIterator != node->getLayoutChildren().end(); lineCount++) {\n    auto flexLine = calculateFlexLine(\n        node,\n        ownerDirection,\n        ownerWidth,\n        mainAxisOwnerSize,\n        availableInnerWidth,\n        availableInnerMainDim,\n        startOfLineIterator,\n        lineCount);\n\n    // If we don't need to measure the cross axis, we can skip the entire flex\n    // step.\n    const bool canSkipFlex =\n        !performLayout && sizingModeCrossDim == SizingMode::StretchFit;\n\n    // STEP 5: RESOLVING FLEXIBLE LENGTHS ON MAIN AXIS\n    // Calculate the remaining available space that needs to be allocated. If\n    // the main dimension size isn't known, it is computed based on the line\n    // length, so there's no more space left to distribute.\n\n    bool sizeBasedOnContent = false;\n    // If we don't measure with exact main dimension we want to ensure we don't\n    // violate min and max\n    if (sizingModeMainDim != SizingMode::StretchFit) {\n      const auto& style = node->style();\n      const float minInnerWidth =\n          style\n              .resolvedMinDimension(\n                  direction, Dimension::Width, ownerWidth, ownerWidth)\n              .unwrap() -\n          paddingAndBorderAxisRow;\n      const float maxInnerWidth =\n          style\n              .resolvedMaxDimension(\n                  direction, Dimension::Width, ownerWidth, ownerWidth)\n              .unwrap() -\n          paddingAndBorderAxisRow;\n      const float minInnerHeight =\n          style\n              .resolvedMinDimension(\n                  direction, Dimension::Height, ownerHeight, ownerWidth)\n              .unwrap() -\n          paddingAndBorderAxisColumn;\n      const float maxInnerHeight =\n          style\n              .resolvedMaxDimension(\n                  direction, Dimension::Height, ownerHeight, ownerWidth)\n              .unwrap() -\n          paddingAndBorderAxisColumn;\n\n      const float minInnerMainDim =\n          isMainAxisRow ? minInnerWidth : minInnerHeight;\n      const float maxInnerMainDim =\n          isMainAxisRow ? maxInnerWidth : maxInnerHeight;\n\n      if (yoga::isDefined(minInnerMainDim) &&\n          flexLine.sizeConsumed < minInnerMainDim) {\n        availableInnerMainDim = minInnerMainDim;\n      } else if (\n          yoga::isDefined(maxInnerMainDim) &&\n          flexLine.sizeConsumed > maxInnerMainDim) {\n        availableInnerMainDim = maxInnerMainDim;\n      } else {\n        bool useLegacyStretchBehaviour =\n            node->hasErrata(Errata::StretchFlexBasis);\n\n        if (!useLegacyStretchBehaviour &&\n            ((yoga::isDefined(flexLine.layout.totalFlexGrowFactors) &&\n              flexLine.layout.totalFlexGrowFactors == 0) ||\n             (yoga::isDefined(node->resolveFlexGrow()) &&\n              node->resolveFlexGrow() == 0))) {\n          // If we don't have any children to flex or we can't flex the node\n          // itself, space we've used is all space we need. Root node also\n          // should be shrunk to minimum\n          availableInnerMainDim = flexLine.sizeConsumed;\n        }\n\n        sizeBasedOnContent = !useLegacyStretchBehaviour;\n      }\n    }\n\n    if (!sizeBasedOnContent && yoga::isDefined(availableInnerMainDim)) {\n      flexLine.layout.remainingFreeSpace =\n          availableInnerMainDim - flexLine.sizeConsumed;\n    } else if (flexLine.sizeConsumed < 0) {\n      // availableInnerMainDim is indefinite which means the node is being sized\n      // based on its content. sizeConsumed is negative which means\n      // the node will allocate 0 points for its content. Consequently,\n      // remainingFreeSpace is 0 - sizeConsumed.\n      flexLine.layout.remainingFreeSpace = -flexLine.sizeConsumed;\n    }\n\n    if (!canSkipFlex) {\n      resolveFlexibleLength(\n          node,\n          flexLine,\n          mainAxis,\n          crossAxis,\n          direction,\n          ownerWidth,\n          mainAxisOwnerSize,\n          availableInnerMainDim,\n          availableInnerCrossDim,\n          availableInnerWidth,\n          availableInnerHeight,\n          mainAxisOverflows,\n          sizingModeCrossDim,\n          performLayout,\n          layoutMarkerData,\n          depth,\n          generationCount);\n    }\n\n    node->setLayoutHadOverflow(\n        node->getLayout().hadOverflow() ||\n        (flexLine.layout.remainingFreeSpace < 0));\n\n    // STEP 6: MAIN-AXIS JUSTIFICATION & CROSS-AXIS SIZE DETERMINATION\n\n    // At this point, all the children have their dimensions set in the main\n    // axis. Their dimensions are also set in the cross axis with the exception\n    // of items that are aligned \"stretch\". We need to compute these stretch\n    // values and set the final positions.\n\n    justifyMainAxis(\n        node,\n        flexLine,\n        mainAxis,\n        crossAxis,\n        direction,\n        sizingModeMainDim,\n        sizingModeCrossDim,\n        mainAxisOwnerSize,\n        ownerWidth,\n        availableInnerMainDim,\n        availableInnerCrossDim,\n        availableInnerWidth,\n        performLayout);\n\n    float containerCrossAxis = availableInnerCrossDim;\n    if (sizingModeCrossDim == SizingMode::MaxContent ||\n        sizingModeCrossDim == SizingMode::FitContent) {\n      // Compute the cross axis from the max cross dimension of the children.\n      containerCrossAxis =\n          boundAxis(\n              node,\n              crossAxis,\n              direction,\n              flexLine.layout.crossDim + paddingAndBorderAxisCross,\n              crossAxisOwnerSize,\n              ownerWidth) -\n          paddingAndBorderAxisCross;\n    }\n\n    // If there's no flex wrap, the cross dimension is defined by the container.\n    if (!isNodeFlexWrap && sizingModeCrossDim == SizingMode::StretchFit) {\n      flexLine.layout.crossDim = availableInnerCrossDim;\n    }\n\n    // As-per https://www.w3.org/TR/css-flexbox-1/#cross-sizing, the\n    // cross-size of the line within a single-line container should be bound to\n    // min/max constraints before alignment within the line. In a multi-line\n    // container, affecting alignment between the lines.\n    if (!isNodeFlexWrap) {\n      flexLine.layout.crossDim =\n          boundAxis(\n              node,\n              crossAxis,\n              direction,\n              flexLine.layout.crossDim + paddingAndBorderAxisCross,\n              crossAxisOwnerSize,\n              ownerWidth) -\n          paddingAndBorderAxisCross;\n    }\n\n    // STEP 7: CROSS-AXIS ALIGNMENT\n    // We can skip child alignment if we're just measuring the container.\n    if (performLayout) {\n      for (auto child : flexLine.itemsInFlow) {\n        float leadingCrossDim = leadingPaddingAndBorderCross;\n\n        // For a relative children, we're either using alignItems (owner) or\n        // alignSelf (child) in order to determine the position in the cross\n        // axis\n        const Align alignItem = resolveChildAlignment(node, child);\n\n        // If the child uses align stretch, we need to lay it out one more\n        // time, this time forcing the cross-axis size to be the computed\n        // cross size for the current line.\n        if (alignItem == Align::Stretch &&\n            !child->style().flexStartMarginIsAuto(crossAxis, direction) &&\n            !child->style().flexEndMarginIsAuto(crossAxis, direction)) {\n          // If the child defines a definite size for its cross axis, there's\n          // no need to stretch.\n          if (!child->hasDefiniteLength(\n                  dimension(crossAxis), availableInnerCrossDim)) {\n            float childMainSize =\n                child->getLayout().measuredDimension(dimension(mainAxis));\n            const auto& childStyle = child->style();\n            float childCrossSize = childStyle.aspectRatio().isDefined()\n                ? child->style().computeMarginForAxis(\n                      crossAxis, availableInnerWidth) +\n                    (isMainAxisRow\n                         ? childMainSize / childStyle.aspectRatio().unwrap()\n                         : childMainSize * childStyle.aspectRatio().unwrap())\n                : flexLine.layout.crossDim;\n\n            childMainSize += child->style().computeMarginForAxis(\n                mainAxis, availableInnerWidth);\n\n            SizingMode childMainSizingMode = SizingMode::StretchFit;\n            SizingMode childCrossSizingMode = SizingMode::StretchFit;\n            constrainMaxSizeForMode(\n                child,\n                direction,\n                mainAxis,\n                availableInnerMainDim,\n                availableInnerWidth,\n                &childMainSizingMode,\n                &childMainSize);\n            constrainMaxSizeForMode(\n                child,\n                direction,\n                crossAxis,\n                availableInnerCrossDim,\n                availableInnerWidth,\n                &childCrossSizingMode,\n                &childCrossSize);\n\n            const float childWidth =\n                isMainAxisRow ? childMainSize : childCrossSize;\n            const float childHeight =\n                !isMainAxisRow ? childMainSize : childCrossSize;\n\n            auto alignContent = node->style().alignContent();\n            auto crossAxisDoesNotGrow =\n                alignContent != Align::Stretch && isNodeFlexWrap;\n            const SizingMode childWidthSizingMode =\n                yoga::isUndefined(childWidth) ||\n                    (!isMainAxisRow && crossAxisDoesNotGrow)\n                ? SizingMode::MaxContent\n                : SizingMode::StretchFit;\n            const SizingMode childHeightSizingMode =\n                yoga::isUndefined(childHeight) ||\n                    (isMainAxisRow && crossAxisDoesNotGrow)\n                ? SizingMode::MaxContent\n                : SizingMode::StretchFit;\n\n            calculateLayoutInternal(\n                child,\n                childWidth,\n                childHeight,\n                direction,\n                childWidthSizingMode,\n                childHeightSizingMode,\n                availableInnerWidth,\n                availableInnerHeight,\n                true,\n                LayoutPassReason::kStretch,\n                layoutMarkerData,\n                depth,\n                generationCount);\n          }\n        } else {\n          const float remainingCrossDim = containerCrossAxis -\n              child->dimensionWithMargin(crossAxis, availableInnerWidth);\n\n          if (child->style().flexStartMarginIsAuto(crossAxis, direction) &&\n              child->style().flexEndMarginIsAuto(crossAxis, direction)) {\n            leadingCrossDim += yoga::maxOrDefined(0.0f, remainingCrossDim / 2);\n          } else if (child->style().flexEndMarginIsAuto(crossAxis, direction)) {\n            // No-Op\n          } else if (child->style().flexStartMarginIsAuto(\n                         crossAxis, direction)) {\n            leadingCrossDim += yoga::maxOrDefined(0.0f, remainingCrossDim);\n          } else if (alignItem == Align::FlexStart) {\n            // No-Op\n          } else if (alignItem == Align::Center) {\n            leadingCrossDim += remainingCrossDim / 2;\n          } else {\n            leadingCrossDim += remainingCrossDim;\n          }\n        }\n        // And we apply the position\n        child->setLayoutPosition(\n            child->getLayout().position(flexStartEdge(crossAxis)) +\n                totalLineCrossDim + leadingCrossDim,\n            flexStartEdge(crossAxis));\n      }\n    }\n\n    const float appliedCrossGap = lineCount != 0 ? crossAxisGap : 0.0f;\n    totalLineCrossDim += flexLine.layout.crossDim + appliedCrossGap;\n    maxLineMainDim =\n        yoga::maxOrDefined(maxLineMainDim, flexLine.layout.mainDim);\n  }\n\n  // STEP 8: MULTI-LINE CONTENT ALIGNMENT\n  // currentLead stores the size of the cross dim\n  if (performLayout && (isNodeFlexWrap || isBaselineLayout(node))) {\n    float leadPerLine = 0;\n    float currentLead = leadingPaddingAndBorderCross;\n    float extraSpacePerLine = 0;\n\n    const float unclampedCrossDim = sizingModeCrossDim == SizingMode::StretchFit\n        ? availableInnerCrossDim + paddingAndBorderAxisCross\n        : node->hasDefiniteLength(dimension(crossAxis), crossAxisOwnerSize)\n        ? node->getResolvedDimension(\n                  direction,\n                  dimension(crossAxis),\n                  crossAxisOwnerSize,\n                  ownerWidth)\n              .unwrap()\n        : totalLineCrossDim + paddingAndBorderAxisCross;\n\n    const float innerCrossDim = boundAxis(\n                                    node,\n                                    crossAxis,\n                                    direction,\n                                    unclampedCrossDim,\n                                    crossAxisOwnerSize,\n                                    ownerWidth) -\n        paddingAndBorderAxisCross;\n\n    const float remainingAlignContentDim = innerCrossDim - totalLineCrossDim;\n\n    const auto alignContent = remainingAlignContentDim >= 0\n        ? node->style().alignContent()\n        : fallbackAlignment(node->style().alignContent());\n\n    switch (alignContent) {\n      case Align::Start:\n      case Align::End:\n        // No-Op\n        break;\n      case Align::FlexEnd:\n        currentLead += remainingAlignContentDim;\n        break;\n      case Align::Center:\n        currentLead += remainingAlignContentDim / 2;\n        break;\n      case Align::Stretch:\n        extraSpacePerLine =\n            remainingAlignContentDim / static_cast<float>(lineCount);\n        break;\n      case Align::SpaceAround:\n        currentLead +=\n            remainingAlignContentDim / (2 * static_cast<float>(lineCount));\n        leadPerLine = remainingAlignContentDim / static_cast<float>(lineCount);\n        break;\n      case Align::SpaceEvenly:\n        currentLead +=\n            remainingAlignContentDim / static_cast<float>(lineCount + 1);\n        leadPerLine =\n            remainingAlignContentDim / static_cast<float>(lineCount + 1);\n        break;\n      case Align::SpaceBetween:\n        if (lineCount > 1) {\n          leadPerLine =\n              remainingAlignContentDim / static_cast<float>(lineCount - 1);\n        }\n        break;\n      case Align::Auto:\n      case Align::FlexStart:\n      case Align::Baseline:\n        break;\n    }\n    Node::LayoutableChildren::Iterator endIterator =\n        node->getLayoutChildren().begin();\n    for (size_t i = 0; i < lineCount; i++) {\n      const Node::LayoutableChildren::Iterator startIterator = endIterator;\n      auto iterator = startIterator;\n\n      // compute the line's height and find the endIndex\n      float lineHeight = 0;\n      float maxAscentForCurrentLine = 0;\n      float maxDescentForCurrentLine = 0;\n      for (; iterator != node->getLayoutChildren().end(); iterator++) {\n        const auto child = *iterator;\n        if (child->style().display() == Display::None) {\n          continue;\n        }\n        if (child->style().positionType() != PositionType::Absolute) {\n          if (child->getLineIndex() != i) {\n            break;\n          }\n          if (child->isLayoutDimensionDefined(crossAxis)) {\n            lineHeight = yoga::maxOrDefined(\n                lineHeight,\n                child->getLayout().measuredDimension(dimension(crossAxis)) +\n                    child->style().computeMarginForAxis(\n                        crossAxis, availableInnerWidth));\n          }\n          if (resolveChildAlignment(node, child) == Align::Baseline) {\n            const float ascent = calculateBaseline(child) +\n                child->style().computeFlexStartMargin(\n                    FlexDirection::Column, direction, availableInnerWidth);\n            const float descent =\n                child->getLayout().measuredDimension(Dimension::Height) +\n                child->style().computeMarginForAxis(\n                    FlexDirection::Column, availableInnerWidth) -\n                ascent;\n            maxAscentForCurrentLine =\n                yoga::maxOrDefined(maxAscentForCurrentLine, ascent);\n            maxDescentForCurrentLine =\n                yoga::maxOrDefined(maxDescentForCurrentLine, descent);\n            lineHeight = yoga::maxOrDefined(\n                lineHeight, maxAscentForCurrentLine + maxDescentForCurrentLine);\n          }\n        }\n      }\n      endIterator = iterator;\n      currentLead += i != 0 ? crossAxisGap : 0;\n      lineHeight += extraSpacePerLine;\n\n      for (iterator = startIterator; iterator != endIterator; iterator++) {\n        const auto child = *iterator;\n        if (child->style().display() == Display::None) {\n          continue;\n        }\n        if (child->style().positionType() != PositionType::Absolute) {\n          switch (resolveChildAlignment(node, child)) {\n            case Align::Start:\n            case Align::End:\n              // Not yet implemented\n              break;\n            case Align::FlexStart: {\n              child->setLayoutPosition(\n                  currentLead +\n                      child->style().computeFlexStartPosition(\n                          crossAxis, direction, availableInnerWidth),\n                  flexStartEdge(crossAxis));\n              break;\n            }\n            case Align::FlexEnd: {\n              child->setLayoutPosition(\n                  currentLead + lineHeight -\n                      child->style().computeFlexEndMargin(\n                          crossAxis, direction, availableInnerWidth) -\n                      child->getLayout().measuredDimension(\n                          dimension(crossAxis)),\n                  flexStartEdge(crossAxis));\n              break;\n            }\n            case Align::Center: {\n              float childHeight =\n                  child->getLayout().measuredDimension(dimension(crossAxis));\n\n              child->setLayoutPosition(\n                  currentLead + (lineHeight - childHeight) / 2,\n                  flexStartEdge(crossAxis));\n              break;\n            }\n            case Align::Stretch: {\n              child->setLayoutPosition(\n                  currentLead +\n                      child->style().computeFlexStartMargin(\n                          crossAxis, direction, availableInnerWidth),\n                  flexStartEdge(crossAxis));\n\n              // Remeasure child with the line height as it as been only\n              // measured with the owners height yet.\n              if (!child->hasDefiniteLength(\n                      dimension(crossAxis), availableInnerCrossDim)) {\n                const float childWidth = isMainAxisRow\n                    ? (child->getLayout().measuredDimension(Dimension::Width) +\n                       child->style().computeMarginForAxis(\n                           mainAxis, availableInnerWidth))\n                    : leadPerLine + lineHeight;\n\n                const float childHeight = !isMainAxisRow\n                    ? (child->getLayout().measuredDimension(Dimension::Height) +\n                       child->style().computeMarginForAxis(\n                           crossAxis, availableInnerWidth))\n                    : leadPerLine + lineHeight;\n\n                if (!(yoga::inexactEquals(\n                          childWidth,\n                          child->getLayout().measuredDimension(\n                              Dimension::Width)) &&\n                      yoga::inexactEquals(\n                          childHeight,\n                          child->getLayout().measuredDimension(\n                              Dimension::Height)))) {\n                  calculateLayoutInternal(\n                      child,\n                      childWidth,\n                      childHeight,\n                      direction,\n                      SizingMode::StretchFit,\n                      SizingMode::StretchFit,\n                      availableInnerWidth,\n                      availableInnerHeight,\n                      true,\n                      LayoutPassReason::kMultilineStretch,\n                      layoutMarkerData,\n                      depth,\n                      generationCount);\n                }\n              }\n              break;\n            }\n            case Align::Baseline: {\n              child->setLayoutPosition(\n                  currentLead + maxAscentForCurrentLine -\n                      calculateBaseline(child) +\n                      child->style().computeFlexStartPosition(\n                          FlexDirection::Column,\n                          direction,\n                          availableInnerCrossDim),\n                  PhysicalEdge::Top);\n\n              break;\n            }\n            case Align::Auto:\n            case Align::SpaceBetween:\n            case Align::SpaceAround:\n            case Align::SpaceEvenly:\n              break;\n          }\n        }\n      }\n\n      currentLead = currentLead + leadPerLine + lineHeight;\n    }\n  }\n\n  // STEP 9: COMPUTING FINAL DIMENSIONS\n\n  node->setLayoutMeasuredDimension(\n      boundAxis(\n          node,\n          FlexDirection::Row,\n          direction,\n          availableWidth - marginAxisRow,\n          ownerWidth,\n          ownerWidth),\n      Dimension::Width);\n\n  node->setLayoutMeasuredDimension(\n      boundAxis(\n          node,\n          FlexDirection::Column,\n          direction,\n          availableHeight - marginAxisColumn,\n          ownerHeight,\n          ownerWidth),\n      Dimension::Height);\n\n  // If the user didn't specify a width or height for the node, set the\n  // dimensions based on the children.\n  if (sizingModeMainDim == SizingMode::MaxContent ||\n      (node->style().overflow() != Overflow::Scroll &&\n       sizingModeMainDim == SizingMode::FitContent)) {\n    // Clamp the size to the min/max size, if specified, and make sure it\n    // doesn't go below the padding and border amount.\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            mainAxis,\n            direction,\n            maxLineMainDim,\n            mainAxisOwnerSize,\n            ownerWidth),\n        dimension(mainAxis));\n\n  } else if (\n      sizingModeMainDim == SizingMode::FitContent &&\n      node->style().overflow() == Overflow::Scroll) {\n    node->setLayoutMeasuredDimension(\n        yoga::maxOrDefined(\n            yoga::minOrDefined(\n                availableInnerMainDim + paddingAndBorderAxisMain,\n                boundAxisWithinMinAndMax(\n                    node,\n                    direction,\n                    mainAxis,\n                    FloatOptional{maxLineMainDim},\n                    mainAxisOwnerSize,\n                    ownerWidth)\n                    .unwrap()),\n            paddingAndBorderAxisMain),\n        dimension(mainAxis));\n  }\n\n  if (sizingModeCrossDim == SizingMode::MaxContent ||\n      (node->style().overflow() != Overflow::Scroll &&\n       sizingModeCrossDim == SizingMode::FitContent)) {\n    // Clamp the size to the min/max size, if specified, and make sure it\n    // doesn't go below the padding and border amount.\n    node->setLayoutMeasuredDimension(\n        boundAxis(\n            node,\n            crossAxis,\n            direction,\n            totalLineCrossDim + paddingAndBorderAxisCross,\n            crossAxisOwnerSize,\n            ownerWidth),\n        dimension(crossAxis));\n\n  } else if (\n      sizingModeCrossDim == SizingMode::FitContent &&\n      node->style().overflow() == Overflow::Scroll) {\n    node->setLayoutMeasuredDimension(\n        yoga::maxOrDefined(\n            yoga::minOrDefined(\n                availableInnerCrossDim + paddingAndBorderAxisCross,\n                boundAxisWithinMinAndMax(\n                    node,\n                    direction,\n                    crossAxis,\n                    FloatOptional{\n                        totalLineCrossDim + paddingAndBorderAxisCross},\n                    crossAxisOwnerSize,\n                    ownerWidth)\n                    .unwrap()),\n            paddingAndBorderAxisCross),\n        dimension(crossAxis));\n  }\n\n  // As we only wrapped in normal direction yet, we need to reverse the\n  // positions on wrap-reverse.\n  if (performLayout && node->style().flexWrap() == Wrap::WrapReverse) {\n    for (auto child : node->getLayoutChildren()) {\n      if (child->style().positionType() != PositionType::Absolute) {\n        child->setLayoutPosition(\n            node->getLayout().measuredDimension(dimension(crossAxis)) -\n                child->getLayout().position(flexStartEdge(crossAxis)) -\n                child->getLayout().measuredDimension(dimension(crossAxis)),\n            flexStartEdge(crossAxis));\n      }\n    }\n  }\n\n  if (performLayout) {\n    // STEP 10: SETTING TRAILING POSITIONS FOR CHILDREN\n    const bool needsMainTrailingPos = needsTrailingPosition(mainAxis);\n    const bool needsCrossTrailingPos = needsTrailingPosition(crossAxis);\n\n    if (needsMainTrailingPos || needsCrossTrailingPos) {\n      for (auto child : node->getLayoutChildren()) {\n        // Absolute children will be handled by their containing block since we\n        // cannot guarantee that their positions are set when their parents are\n        // done with layout.\n        if (child->style().display() == Display::None ||\n            child->style().positionType() == PositionType::Absolute) {\n          continue;\n        }\n        if (needsMainTrailingPos) {\n          setChildTrailingPosition(node, child, mainAxis);\n        }\n\n        if (needsCrossTrailingPos) {\n          setChildTrailingPosition(node, child, crossAxis);\n        }\n      }\n    }\n\n    // STEP 11: SIZING AND POSITIONING ABSOLUTE CHILDREN\n    // Let the containing block layout its absolute descendants.\n    if (node->style().positionType() != PositionType::Static ||\n        node->alwaysFormsContainingBlock() || depth == 1) {\n      layoutAbsoluteDescendants(\n          node,\n          node,\n          isMainAxisRow ? sizingModeMainDim : sizingModeCrossDim,\n          direction,\n          layoutMarkerData,\n          depth,\n          generationCount,\n          0.0f,\n          0.0f,\n          availableInnerWidth,\n          availableInnerHeight);\n    }\n  }\n}\n\n//\n// This is a wrapper around the calculateLayoutImpl function. It determines\n// whether the layout request is redundant and can be skipped.\n//\n// Parameters:\n//  Input parameters are the same as calculateLayoutImpl (see above)\n//  Return parameter is true if layout was performed, false if skipped\n//\nbool calculateLayoutInternal(\n    yoga::Node* const node,\n    const float availableWidth,\n    const float availableHeight,\n    const Direction ownerDirection,\n    const SizingMode widthSizingMode,\n    const SizingMode heightSizingMode,\n    const float ownerWidth,\n    const float ownerHeight,\n    const bool performLayout,\n    const LayoutPassReason reason,\n    LayoutData& layoutMarkerData,\n    uint32_t depth,\n    const uint32_t generationCount) {\n  LayoutResults* layout = &node->getLayout();\n\n  depth++;\n\n  const bool needToVisitNode =\n      (node->isDirty() && layout->generationCount != generationCount) ||\n      layout->configVersion != node->getConfig()->getVersion() ||\n      layout->lastOwnerDirection != ownerDirection;\n\n  if (needToVisitNode) {\n    // Invalidate the cached results.\n    layout->nextCachedMeasurementsIndex = 0;\n    layout->cachedLayout.availableWidth = -1;\n    layout->cachedLayout.availableHeight = -1;\n    layout->cachedLayout.widthSizingMode = SizingMode::MaxContent;\n    layout->cachedLayout.heightSizingMode = SizingMode::MaxContent;\n    layout->cachedLayout.computedWidth = -1;\n    layout->cachedLayout.computedHeight = -1;\n  }\n\n  CachedMeasurement* cachedResults = nullptr;\n\n  // Determine whether the results are already cached. We maintain a separate\n  // cache for layouts and measurements. A layout operation modifies the\n  // positions and dimensions for nodes in the subtree. The algorithm assumes\n  // that each node gets laid out a maximum of one time per tree layout, but\n  // multiple measurements may be required to resolve all of the flex\n  // dimensions. We handle nodes with measure functions specially here because\n  // they are the most expensive to measure, so it's worth avoiding redundant\n  // measurements if at all possible.\n  if (node->hasMeasureFunc()) {\n    const float marginAxisRow =\n        node->style().computeMarginForAxis(FlexDirection::Row, ownerWidth);\n    const float marginAxisColumn =\n        node->style().computeMarginForAxis(FlexDirection::Column, ownerWidth);\n\n    // First, try to use the layout cache.\n    if (canUseCachedMeasurement(\n            widthSizingMode,\n            availableWidth,\n            heightSizingMode,\n            availableHeight,\n            layout->cachedLayout.widthSizingMode,\n            layout->cachedLayout.availableWidth,\n            layout->cachedLayout.heightSizingMode,\n            layout->cachedLayout.availableHeight,\n            layout->cachedLayout.computedWidth,\n            layout->cachedLayout.computedHeight,\n            marginAxisRow,\n            marginAxisColumn,\n            node->getConfig())) {\n      cachedResults = &layout->cachedLayout;\n    } else {\n      // Try to use the measurement cache.\n      for (size_t i = 0; i < layout->nextCachedMeasurementsIndex; i++) {\n        if (canUseCachedMeasurement(\n                widthSizingMode,\n                availableWidth,\n                heightSizingMode,\n                availableHeight,\n                layout->cachedMeasurements[i].widthSizingMode,\n                layout->cachedMeasurements[i].availableWidth,\n                layout->cachedMeasurements[i].heightSizingMode,\n                layout->cachedMeasurements[i].availableHeight,\n                layout->cachedMeasurements[i].computedWidth,\n                layout->cachedMeasurements[i].computedHeight,\n                marginAxisRow,\n                marginAxisColumn,\n                node->getConfig())) {\n          cachedResults = &layout->cachedMeasurements[i];\n          break;\n        }\n      }\n    }\n  } else if (performLayout) {\n    if (yoga::inexactEquals(\n            layout->cachedLayout.availableWidth, availableWidth) &&\n        yoga::inexactEquals(\n            layout->cachedLayout.availableHeight, availableHeight) &&\n        layout->cachedLayout.widthSizingMode == widthSizingMode &&\n        layout->cachedLayout.heightSizingMode == heightSizingMode) {\n      cachedResults = &layout->cachedLayout;\n    }\n  } else {\n    for (uint32_t i = 0; i < layout->nextCachedMeasurementsIndex; i++) {\n      if (yoga::inexactEquals(\n              layout->cachedMeasurements[i].availableWidth, availableWidth) &&\n          yoga::inexactEquals(\n              layout->cachedMeasurements[i].availableHeight, availableHeight) &&\n          layout->cachedMeasurements[i].widthSizingMode == widthSizingMode &&\n          layout->cachedMeasurements[i].heightSizingMode == heightSizingMode) {\n        cachedResults = &layout->cachedMeasurements[i];\n        break;\n      }\n    }\n  }\n\n  if (!needToVisitNode && cachedResults != nullptr) {\n    layout->setMeasuredDimension(\n        Dimension::Width, cachedResults->computedWidth);\n    layout->setMeasuredDimension(\n        Dimension::Height, cachedResults->computedHeight);\n\n    (performLayout ? layoutMarkerData.cachedLayouts\n                   : layoutMarkerData.cachedMeasures) += 1;\n  } else {\n    calculateLayoutImpl(\n        node,\n        availableWidth,\n        availableHeight,\n        ownerDirection,\n        widthSizingMode,\n        heightSizingMode,\n        ownerWidth,\n        ownerHeight,\n        performLayout,\n        reason,\n        layoutMarkerData,\n        depth,\n        generationCount);\n\n    layout->lastOwnerDirection = ownerDirection;\n    layout->configVersion = node->getConfig()->getVersion();\n\n    if (cachedResults == nullptr) {\n      layoutMarkerData.maxMeasureCache = std::max(\n          layoutMarkerData.maxMeasureCache,\n          layout->nextCachedMeasurementsIndex + 1u);\n\n      if (layout->nextCachedMeasurementsIndex ==\n          LayoutResults::MaxCachedMeasurements) {\n        layout->nextCachedMeasurementsIndex = 0;\n      }\n\n      CachedMeasurement* newCacheEntry = nullptr;\n      if (performLayout) {\n        // Use the single layout cache entry.\n        newCacheEntry = &layout->cachedLayout;\n      } else {\n        // Allocate a new measurement cache entry.\n        newCacheEntry =\n            &layout->cachedMeasurements[layout->nextCachedMeasurementsIndex];\n        layout->nextCachedMeasurementsIndex++;\n      }\n\n      newCacheEntry->availableWidth = availableWidth;\n      newCacheEntry->availableHeight = availableHeight;\n      newCacheEntry->widthSizingMode = widthSizingMode;\n      newCacheEntry->heightSizingMode = heightSizingMode;\n      newCacheEntry->computedWidth =\n          layout->measuredDimension(Dimension::Width);\n      newCacheEntry->computedHeight =\n          layout->measuredDimension(Dimension::Height);\n    }\n  }\n\n  if (performLayout) {\n    node->setLayoutDimension(\n        node->getLayout().measuredDimension(Dimension::Width),\n        Dimension::Width);\n    node->setLayoutDimension(\n        node->getLayout().measuredDimension(Dimension::Height),\n        Dimension::Height);\n\n    node->setHasNewLayout(true);\n    node->setDirty(false);\n  }\n\n  layout->generationCount = generationCount;\n\n  LayoutType layoutType;\n  if (performLayout) {\n    layoutType = !needToVisitNode && cachedResults == &layout->cachedLayout\n        ? LayoutType::kCachedLayout\n        : LayoutType::kLayout;\n  } else {\n    layoutType = cachedResults != nullptr ? LayoutType::kCachedMeasure\n                                          : LayoutType::kMeasure;\n  }\n  Event::publish<Event::NodeLayout>(node, {layoutType});\n\n  return (needToVisitNode || cachedResults == nullptr);\n}\n\nvoid calculateLayout(\n    yoga::Node* const node,\n    const float ownerWidth,\n    const float ownerHeight,\n    const Direction ownerDirection) {\n  Event::publish<Event::LayoutPassStart>(node);\n  LayoutData markerData = {};\n\n  // Increment the generation count. This will force the recursive routine to\n  // visit all dirty nodes at least once. Subsequent visits will be skipped if\n  // the input parameters don't change.\n  gCurrentGenerationCount.fetch_add(1, std::memory_order_relaxed);\n  node->processDimensions();\n  const Direction direction = node->resolveDirection(ownerDirection);\n  float width = YGUndefined;\n  SizingMode widthSizingMode = SizingMode::MaxContent;\n  const auto& style = node->style();\n  if (node->hasDefiniteLength(Dimension::Width, ownerWidth)) {\n    width =\n        (node->getResolvedDimension(\n                 direction,\n                 dimension(FlexDirection::Row),\n                 ownerWidth,\n                 ownerWidth)\n             .unwrap() +\n         node->style().computeMarginForAxis(FlexDirection::Row, ownerWidth));\n    widthSizingMode = SizingMode::StretchFit;\n  } else if (style\n                 .resolvedMaxDimension(\n                     direction, Dimension::Width, ownerWidth, ownerWidth)\n                 .isDefined()) {\n    width = style\n                .resolvedMaxDimension(\n                    direction, Dimension::Width, ownerWidth, ownerWidth)\n                .unwrap();\n    widthSizingMode = SizingMode::FitContent;\n  } else {\n    width = ownerWidth;\n    widthSizingMode = yoga::isUndefined(width) ? SizingMode::MaxContent\n                                               : SizingMode::StretchFit;\n  }\n\n  float height = YGUndefined;\n  SizingMode heightSizingMode = SizingMode::MaxContent;\n  if (node->hasDefiniteLength(Dimension::Height, ownerHeight)) {\n    height =\n        (node->getResolvedDimension(\n                 direction,\n                 dimension(FlexDirection::Column),\n                 ownerHeight,\n                 ownerWidth)\n             .unwrap() +\n         node->style().computeMarginForAxis(FlexDirection::Column, ownerWidth));\n    heightSizingMode = SizingMode::StretchFit;\n  } else if (style\n                 .resolvedMaxDimension(\n                     direction, Dimension::Height, ownerHeight, ownerWidth)\n                 .isDefined()) {\n    height = style\n                 .resolvedMaxDimension(\n                     direction, Dimension::Height, ownerHeight, ownerWidth)\n                 .unwrap();\n    heightSizingMode = SizingMode::FitContent;\n  } else {\n    height = ownerHeight;\n    heightSizingMode = yoga::isUndefined(height) ? SizingMode::MaxContent\n                                                 : SizingMode::StretchFit;\n  }\n  if (calculateLayoutInternal(\n          node,\n          width,\n          height,\n          ownerDirection,\n          widthSizingMode,\n          heightSizingMode,\n          ownerWidth,\n          ownerHeight,\n          true,\n          LayoutPassReason::kInitial,\n          markerData,\n          0, // tree root\n          gCurrentGenerationCount.load(std::memory_order_relaxed))) {\n    node->setPosition(node->getLayout().direction(), ownerWidth, ownerHeight);\n    roundLayoutResultsToPixelGrid(node, 0.0f, 0.0f);\n  }\n\n  Event::publish<Event::LayoutPassEnd>(node, {&markerData});\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/CalculateLayout.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\nvoid calculateLayout(\n    yoga::Node* node,\n    float ownerWidth,\n    float ownerHeight,\n    Direction ownerDirection);\n\nbool calculateLayoutInternal(\n    yoga::Node* node,\n    float availableWidth,\n    float availableHeight,\n    Direction ownerDirection,\n    SizingMode widthSizingMode,\n    SizingMode heightSizingMode,\n    float ownerWidth,\n    float ownerHeight,\n    bool performLayout,\n    LayoutPassReason reason,\n    LayoutData& layoutMarkerData,\n    uint32_t depth,\n    uint32_t generationCount);\n\nvoid constrainMaxSizeForMode(\n    const yoga::Node* node,\n    Direction direction,\n    FlexDirection axis,\n    float ownerAxisSize,\n    float ownerWidth,\n    /*in_out*/ SizingMode* mode,\n    /*in_out*/ float* size);\n\nfloat calculateAvailableInnerDimension(\n    const yoga::Node* const node,\n    const Direction direction,\n    const Dimension dimension,\n    const float availableDim,\n    float paddingAndBorder,\n    const float ownerDim,\n    const float ownerWidth);\n\nvoid zeroOutLayoutRecursively(yoga::Node* const node);\n\nvoid cleanupContentsNodesRecursively(yoga::Node* const node);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/FlexDirection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/enums/Dimension.h>\n#include <yoga/enums/Direction.h>\n#include <yoga/enums/Edge.h>\n#include <yoga/enums/FlexDirection.h>\n#include <yoga/enums/PhysicalEdge.h>\n\nnamespace facebook::yoga {\n\ninline bool isRow(const FlexDirection flexDirection) {\n  return flexDirection == FlexDirection::Row ||\n      flexDirection == FlexDirection::RowReverse;\n}\n\ninline bool isColumn(const FlexDirection flexDirection) {\n  return flexDirection == FlexDirection::Column ||\n      flexDirection == FlexDirection::ColumnReverse;\n}\n\ninline FlexDirection resolveDirection(\n    const FlexDirection flexDirection,\n    const Direction direction) {\n  if (direction == Direction::RTL) {\n    if (flexDirection == FlexDirection::Row) {\n      return FlexDirection::RowReverse;\n    } else if (flexDirection == FlexDirection::RowReverse) {\n      return FlexDirection::Row;\n    }\n  }\n\n  return flexDirection;\n}\n\ninline FlexDirection resolveCrossDirection(\n    const FlexDirection flexDirection,\n    const Direction direction) {\n  return isColumn(flexDirection)\n      ? resolveDirection(FlexDirection::Row, direction)\n      : FlexDirection::Column;\n}\n\ninline PhysicalEdge flexStartEdge(FlexDirection flexDirection) {\n  switch (flexDirection) {\n    case FlexDirection::Column:\n      return PhysicalEdge::Top;\n    case FlexDirection::ColumnReverse:\n      return PhysicalEdge::Bottom;\n    case FlexDirection::Row:\n      return PhysicalEdge::Left;\n    case FlexDirection::RowReverse:\n      return PhysicalEdge::Right;\n    default:\n      fatalWithMessage(\"Invalid FlexDirection\");\n  }\n}\n\ninline PhysicalEdge flexEndEdge(FlexDirection flexDirection) {\n  switch (flexDirection) {\n    case FlexDirection::Column:\n      return PhysicalEdge::Bottom;\n    case FlexDirection::ColumnReverse:\n      return PhysicalEdge::Top;\n    case FlexDirection::Row:\n      return PhysicalEdge::Right;\n    case FlexDirection::RowReverse:\n      return PhysicalEdge::Left;\n    default:\n      fatalWithMessage(\"Invalid FlexDirection\");\n  }\n}\n\ninline PhysicalEdge inlineStartEdge(\n    FlexDirection flexDirection,\n    Direction direction) {\n  if (isRow(flexDirection)) {\n    return direction == Direction::RTL ? PhysicalEdge::Right\n                                       : PhysicalEdge::Left;\n  }\n\n  return PhysicalEdge::Top;\n}\n\ninline PhysicalEdge inlineEndEdge(\n    FlexDirection flexDirection,\n    Direction direction) {\n  if (isRow(flexDirection)) {\n    return direction == Direction::RTL ? PhysicalEdge::Left\n                                       : PhysicalEdge::Right;\n  }\n\n  return PhysicalEdge::Bottom;\n}\n\ninline Dimension dimension(FlexDirection flexDirection) {\n  switch (flexDirection) {\n    case FlexDirection::Column:\n      return Dimension::Height;\n    case FlexDirection::ColumnReverse:\n      return Dimension::Height;\n    case FlexDirection::Row:\n      return Dimension::Width;\n    case FlexDirection::RowReverse:\n      return Dimension::Width;\n    default:\n      fatalWithMessage(\"Invalid FlexDirection\");\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/FlexLine.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/BoundAxis.h>\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/algorithm/FlexLine.h>\n\nnamespace facebook::yoga {\n\nFlexLine calculateFlexLine(\n    yoga::Node* const node,\n    const Direction ownerDirection,\n    const float ownerWidth,\n    const float mainAxisOwnerSize,\n    const float availableInnerWidth,\n    const float availableInnerMainDim,\n    Node::LayoutableChildren::Iterator& iterator,\n    const size_t lineCount) {\n  std::vector<yoga::Node*> itemsInFlow;\n  itemsInFlow.reserve(node->getChildCount());\n\n  float sizeConsumed = 0.0f;\n  float totalFlexGrowFactors = 0.0f;\n  float totalFlexShrinkScaledFactors = 0.0f;\n  size_t numberOfAutoMargins = 0;\n  yoga::Node* firstElementInLine = nullptr;\n\n  float sizeConsumedIncludingMinConstraint = 0;\n  const Direction direction = node->resolveDirection(ownerDirection);\n  const FlexDirection mainAxis =\n      resolveDirection(node->style().flexDirection(), direction);\n  const bool isNodeFlexWrap = node->style().flexWrap() != Wrap::NoWrap;\n  const float gap =\n      node->style().computeGapForAxis(mainAxis, availableInnerMainDim);\n\n  const auto childrenEnd = node->getLayoutChildren().end();\n  // Add items to the current line until it's full or we run out of items.\n  for (; iterator != childrenEnd; iterator++) {\n    auto child = *iterator;\n    if (child->style().display() == Display::None ||\n        child->style().positionType() == PositionType::Absolute) {\n      continue;\n    }\n\n    if (firstElementInLine == nullptr) {\n      firstElementInLine = child;\n    }\n\n    if (child->style().flexStartMarginIsAuto(mainAxis, ownerDirection)) {\n      numberOfAutoMargins++;\n    }\n    if (child->style().flexEndMarginIsAuto(mainAxis, ownerDirection)) {\n      numberOfAutoMargins++;\n    }\n\n    child->setLineIndex(lineCount);\n    const float childMarginMainAxis =\n        child->style().computeMarginForAxis(mainAxis, availableInnerWidth);\n    const float childLeadingGapMainAxis =\n        child == firstElementInLine ? 0.0f : gap;\n    const float flexBasisWithMinAndMaxConstraints =\n        boundAxisWithinMinAndMax(\n            child,\n            direction,\n            mainAxis,\n            child->getLayout().computedFlexBasis,\n            mainAxisOwnerSize,\n            ownerWidth)\n            .unwrap();\n\n    // If this is a multi-line flow and this item pushes us over the available\n    // size, we've hit the end of the current line. Break out of the loop and\n    // lay out the current line.\n    if (sizeConsumedIncludingMinConstraint + flexBasisWithMinAndMaxConstraints +\n                childMarginMainAxis + childLeadingGapMainAxis >\n            availableInnerMainDim &&\n        isNodeFlexWrap && !itemsInFlow.empty()) {\n      break;\n    }\n\n    sizeConsumedIncludingMinConstraint += flexBasisWithMinAndMaxConstraints +\n        childMarginMainAxis + childLeadingGapMainAxis;\n    sizeConsumed += flexBasisWithMinAndMaxConstraints + childMarginMainAxis +\n        childLeadingGapMainAxis;\n\n    if (child->isNodeFlexible()) {\n      totalFlexGrowFactors += child->resolveFlexGrow();\n\n      // Unlike the grow factor, the shrink factor is scaled relative to the\n      // child dimension.\n      totalFlexShrinkScaledFactors += -child->resolveFlexShrink() *\n          child->getLayout().computedFlexBasis.unwrap();\n    }\n\n    itemsInFlow.push_back(child);\n  }\n\n  // The total flex factor needs to be floored to 1.\n  if (totalFlexGrowFactors > 0 && totalFlexGrowFactors < 1) {\n    totalFlexGrowFactors = 1;\n  }\n\n  // The total flex shrink factor needs to be floored to 1.\n  if (totalFlexShrinkScaledFactors > 0 && totalFlexShrinkScaledFactors < 1) {\n    totalFlexShrinkScaledFactors = 1;\n  }\n\n  return FlexLine{\n      .itemsInFlow = std::move(itemsInFlow),\n      .sizeConsumed = sizeConsumed,\n      .numberOfAutoMargins = numberOfAutoMargins,\n      .layout = FlexLineRunningLayout{\n          totalFlexGrowFactors,\n          totalFlexShrinkScaledFactors,\n      }};\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/FlexLine.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <vector>\n\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\nstruct FlexLineRunningLayout {\n  // Total flex grow factors of flex items which are to be laid in the current\n  // line. This is decremented as free space is distributed.\n  float totalFlexGrowFactors{0.0f};\n\n  // Total flex shrink factors of flex items which are to be laid in the current\n  // line. This is decremented as free space is distributed.\n  float totalFlexShrinkScaledFactors{0.0f};\n\n  // The amount of available space within inner dimensions of the line which may\n  // still be distributed.\n  float remainingFreeSpace{0.0f};\n\n  // The size of the mainDim for the row after considering size, padding, margin\n  // and border of flex items. This is used to calculate maxLineDim after going\n  // through all the rows to decide on the main axis size of owner.\n  float mainDim{0.0f};\n\n  // The size of the crossDim for the row after considering size, padding,\n  // margin and border of flex items. Used for calculating containers crossSize.\n  float crossDim{0.0f};\n};\n\nstruct FlexLine {\n  // List of children which are part of the line flow. This means they are not\n  // positioned absolutely, or with `display: \"none\"`, and do not overflow the\n  // available dimensions.\n  const std::vector<yoga::Node*> itemsInFlow{};\n\n  // Accumulation of the dimensions and margin of all the children on the\n  // current line. This will be used in order to either set the dimensions of\n  // the node if none already exist or to compute the remaining space left for\n  // the flexible children.\n  const float sizeConsumed{0.0f};\n\n  // Number of edges along the line flow with an auto margin.\n  const size_t numberOfAutoMargins{0};\n\n  // Layout information about the line computed in steps after line-breaking\n  FlexLineRunningLayout layout{};\n};\n\n// Calculates where a line starting at a given index should break, returning\n// information about the collective children on the liune.\n//\n// This function assumes that all the children of node have their\n// computedFlexBasis properly computed(To do this use\n// computeFlexBasisForChildren function).\nFlexLine calculateFlexLine(\n    yoga::Node* node,\n    Direction ownerDirection,\n    float ownerWidth,\n    float mainAxisOwnerSize,\n    float availableInnerWidth,\n    float availableInnerMainDim,\n    Node::LayoutableChildren::Iterator& iterator,\n    size_t lineCount);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/PixelGrid.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/PixelGrid.h>\n#include <yoga/numeric/Comparison.h>\n\nnamespace facebook::yoga {\n\nfloat roundValueToPixelGrid(\n    const double value,\n    const double pointScaleFactor,\n    const bool forceCeil,\n    const bool forceFloor) {\n  double scaledValue = value * pointScaleFactor;\n  // We want to calculate `fractial` such that `floor(scaledValue) = scaledValue\n  // - fractial`.\n  double fractial = fmod(scaledValue, 1.0);\n  if (fractial < 0) {\n    // This branch is for handling negative numbers for `value`.\n    //\n    // Regarding `floor` and `ceil`. Note that for a number x, `floor(x) <= x <=\n    // ceil(x)` even for negative numbers. Here are a couple of examples:\n    //   - x =  2.2: floor( 2.2) =  2, ceil( 2.2) =  3\n    //   - x = -2.2: floor(-2.2) = -3, ceil(-2.2) = -2\n    //\n    // Regarding `fmodf`. For fractional negative numbers, `fmodf` returns a\n    // negative number. For example, `fmodf(-2.2) = -0.2`. However, we want\n    // `fractial` to be the number such that subtracting it from `value` will\n    // give us `floor(value)`. In the case of negative numbers, adding 1 to\n    // `fmodf(value)` gives us this. Let's continue the example from above:\n    //   - fractial = fmodf(-2.2) = -0.2\n    //   - Add 1 to the fraction: fractial2 = fractial + 1 = -0.2 + 1 = 0.8\n    //   - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3\n    ++fractial;\n  }\n  if (yoga::inexactEquals(fractial, 0)) {\n    // First we check if the value is already rounded\n    scaledValue = scaledValue - fractial;\n  } else if (yoga::inexactEquals(fractial, 1.0)) {\n    scaledValue = scaledValue - fractial + 1.0;\n  } else if (forceCeil) {\n    // Next we check if we need to use forced rounding\n    scaledValue = scaledValue - fractial + 1.0;\n  } else if (forceFloor) {\n    scaledValue = scaledValue - fractial;\n  } else {\n    // Finally we just round the value\n    scaledValue = scaledValue - fractial +\n        (!std::isnan(fractial) &&\n                 (fractial > 0.5 || yoga::inexactEquals(fractial, 0.5))\n             ? 1.0\n             : 0.0);\n  }\n  return (std::isnan(scaledValue) || std::isnan(pointScaleFactor))\n      ? YGUndefined\n      : (float)(scaledValue / pointScaleFactor);\n}\n\nvoid roundLayoutResultsToPixelGrid(\n    yoga::Node* const node,\n    const double absoluteLeft,\n    const double absoluteTop) {\n  const auto pointScaleFactor =\n      static_cast<double>(node->getConfig()->getPointScaleFactor());\n\n  const double nodeLeft = node->getLayout().position(PhysicalEdge::Left);\n  const double nodeTop = node->getLayout().position(PhysicalEdge::Top);\n\n  const double nodeWidth = node->getLayout().dimension(Dimension::Width);\n  const double nodeHeight = node->getLayout().dimension(Dimension::Height);\n\n  const double absoluteNodeLeft = absoluteLeft + nodeLeft;\n  const double absoluteNodeTop = absoluteTop + nodeTop;\n\n  const double absoluteNodeRight = absoluteNodeLeft + nodeWidth;\n  const double absoluteNodeBottom = absoluteNodeTop + nodeHeight;\n\n  if (pointScaleFactor != 0.0) {\n    // If a node has a custom measure function we never want to round down its\n    // size as this could lead to unwanted text truncation.\n    const bool textRounding = node->getNodeType() == NodeType::Text;\n\n    node->setLayoutPosition(\n        roundValueToPixelGrid(nodeLeft, pointScaleFactor, false, textRounding),\n        PhysicalEdge::Left);\n\n    node->setLayoutPosition(\n        roundValueToPixelGrid(nodeTop, pointScaleFactor, false, textRounding),\n        PhysicalEdge::Top);\n\n    // We multiply dimension by scale factor and if the result is close to the\n    // whole number, we don't have any fraction To verify if the result is close\n    // to whole number we want to check both floor and ceil numbers\n\n    const double scaledNodeWith = nodeWidth * pointScaleFactor;\n    const bool hasFractionalWidth =\n        !yoga::inexactEquals(round(scaledNodeWith), scaledNodeWith);\n\n    const double scaledNodeHeight = nodeHeight * pointScaleFactor;\n    const bool hasFractionalHeight =\n        !yoga::inexactEquals(round(scaledNodeHeight), scaledNodeHeight);\n\n    node->getLayout().setDimension(\n        Dimension::Width,\n        roundValueToPixelGrid(\n            absoluteNodeRight,\n            pointScaleFactor,\n            (textRounding && hasFractionalWidth),\n            (textRounding && !hasFractionalWidth)) -\n            roundValueToPixelGrid(\n                absoluteNodeLeft, pointScaleFactor, false, textRounding));\n\n    node->getLayout().setDimension(\n        Dimension::Height,\n        roundValueToPixelGrid(\n            absoluteNodeBottom,\n            pointScaleFactor,\n            (textRounding && hasFractionalHeight),\n            (textRounding && !hasFractionalHeight)) -\n            roundValueToPixelGrid(\n                absoluteNodeTop, pointScaleFactor, false, textRounding));\n  }\n\n  for (yoga::Node* child : node->getChildren()) {\n    roundLayoutResultsToPixelGrid(child, absoluteNodeLeft, absoluteNodeTop);\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/PixelGrid.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\n// Round a point value to the nearest physical pixel based on DPI\n// (pointScaleFactor)\nfloat roundValueToPixelGrid(\n    double value,\n    double pointScaleFactor,\n    bool forceCeil,\n    bool forceFloor);\n\n// Round the layout results of a node and its subtree to the pixel grid.\nvoid roundLayoutResultsToPixelGrid(\n    yoga::Node* node,\n    double absoluteLeft,\n    double absoluteTop);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/SizingMode.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/enums/MeasureMode.h>\n\nnamespace facebook::yoga {\n\n/**\n * Corresponds to a CSS auto box sizes. Missing \"min-content\", as Yoga does not\n * current support automatic minimum sizes.\n * https://www.w3.org/TR/css-sizing-3/#auto-box-sizes\n * https://www.w3.org/TR/css-flexbox-1/#min-size-auto\n */\nenum class SizingMode {\n  /**\n   * The size a box would take if its outer size filled the available space in\n   * the given axis; in other words, the stretch fit into the available space,\n   * if that is definite. Undefined if the available space is indefinite.\n   */\n  StretchFit,\n\n  /**\n   * A box’s “ideal” size in a given axis when given infinite available space.\n   * Usually this is the smallest size the box could take in that axis while\n   * still fitting around its contents, i.e. minimizing unfilled space while\n   * avoiding overflow.\n   */\n  MaxContent,\n\n  /**\n   * If the available space in a given axis is definite, equal to\n   * clamp(min-content size, stretch-fit size, max-content size) (i.e.\n   * max(min-content size, min(max-content size, stretch-fit size))). When\n   * sizing under a min-content constraint, equal to the min-content size.\n   * Otherwise, equal to the max-content size in that axis.\n   */\n  FitContent,\n};\n\ninline MeasureMode measureMode(SizingMode mode) {\n  switch (mode) {\n    case SizingMode::StretchFit:\n      return MeasureMode::Exactly;\n    case SizingMode::MaxContent:\n      return MeasureMode::Undefined;\n    case SizingMode::FitContent:\n      return MeasureMode::AtMost;\n    default:\n      fatalWithMessage(\"Invalid SizingMode\");\n  }\n}\n\ninline SizingMode sizingMode(MeasureMode mode) {\n  switch (mode) {\n    case MeasureMode::Exactly:\n      return SizingMode::StretchFit;\n    case MeasureMode::Undefined:\n      return SizingMode::MaxContent;\n    case MeasureMode::AtMost:\n      return SizingMode::FitContent;\n    default:\n      fatalWithMessage(\"Invalid MeasureMode\");\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/algorithm/TrailingPosition.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/event/event.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\n// Given an offset to an edge, returns the offset to the opposite edge on the\n// same axis. This assumes that the width/height of both nodes is determined at\n// this point.\ninline float getPositionOfOppositeEdge(\n    float position,\n    FlexDirection axis,\n    const yoga::Node* const containingNode,\n    const yoga::Node* const node) {\n  return containingNode->getLayout().measuredDimension(dimension(axis)) -\n      node->getLayout().measuredDimension(dimension(axis)) - position;\n}\n\ninline void setChildTrailingPosition(\n    const yoga::Node* const node,\n    yoga::Node* const child,\n    const FlexDirection axis) {\n  child->setLayoutPosition(\n      getPositionOfOppositeEdge(\n          child->getLayout().position(flexStartEdge(axis)), axis, node, child),\n      flexEndEdge(axis));\n}\n\ninline bool needsTrailingPosition(const FlexDirection axis) {\n  return axis == FlexDirection::RowReverse ||\n      axis == FlexDirection::ColumnReverse;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/config/Config.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/config/Config.h>\n#include <yoga/debug/Log.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\nbool configUpdateInvalidatesLayout(\n    const Config& oldConfig,\n    const Config& newConfig) {\n  return oldConfig.getErrata() != newConfig.getErrata() ||\n      oldConfig.getEnabledExperiments() != newConfig.getEnabledExperiments() ||\n      oldConfig.getPointScaleFactor() != newConfig.getPointScaleFactor() ||\n      oldConfig.useWebDefaults() != newConfig.useWebDefaults();\n}\n\nvoid Config::setUseWebDefaults(bool useWebDefaults) {\n  useWebDefaults_ = useWebDefaults;\n}\n\nbool Config::useWebDefaults() const {\n  return useWebDefaults_;\n}\n\nvoid Config::setExperimentalFeatureEnabled(\n    ExperimentalFeature feature,\n    bool enabled) {\n  if (isExperimentalFeatureEnabled(feature) != enabled) {\n    experimentalFeatures_.set(static_cast<size_t>(feature), enabled);\n    version_++;\n  }\n}\n\nbool Config::isExperimentalFeatureEnabled(ExperimentalFeature feature) const {\n  return experimentalFeatures_.test(static_cast<size_t>(feature));\n}\n\nExperimentalFeatureSet Config::getEnabledExperiments() const {\n  return experimentalFeatures_;\n}\n\nvoid Config::setErrata(Errata errata) {\n  if (errata_ != errata) {\n    errata_ = errata;\n    version_++;\n  }\n}\n\nvoid Config::addErrata(Errata errata) {\n  if (!hasErrata(errata)) {\n    errata_ |= errata;\n    version_++;\n  }\n}\n\nvoid Config::removeErrata(Errata errata) {\n  if (hasErrata(errata)) {\n    errata_ &= (~errata);\n    version_++;\n  }\n}\n\nErrata Config::getErrata() const {\n  return errata_;\n}\n\nbool Config::hasErrata(Errata errata) const {\n  return (errata_ & errata) != Errata::None;\n}\n\nvoid Config::setPointScaleFactor(float pointScaleFactor) {\n  if (pointScaleFactor_ != pointScaleFactor) {\n    pointScaleFactor_ = pointScaleFactor;\n    version_++;\n  }\n}\n\nfloat Config::getPointScaleFactor() const {\n  return pointScaleFactor_;\n}\n\nvoid Config::setContext(void* context) {\n  context_ = context;\n}\n\nvoid* Config::getContext() const {\n  return context_;\n}\n\nuint32_t Config::getVersion() const noexcept {\n  return version_;\n}\n\nvoid Config::setLogger(YGLogger logger) {\n  logger_ = logger;\n}\n\nvoid Config::log(\n    const yoga::Node* node,\n    LogLevel logLevel,\n    const char* format,\n    va_list args) const {\n  logger_(this, node, unscopedEnum(logLevel), format, args);\n}\n\nvoid Config::setCloneNodeCallback(YGCloneNodeFunc cloneNode) {\n  cloneNodeCallback_ = cloneNode;\n}\n\nYGNodeRef Config::cloneNode(\n    YGNodeConstRef node,\n    YGNodeConstRef owner,\n    size_t childIndex) const {\n  YGNodeRef clone = nullptr;\n  if (cloneNodeCallback_ != nullptr) {\n    clone = cloneNodeCallback_(node, owner, childIndex);\n  }\n  if (clone == nullptr) {\n    clone = YGNodeClone(node);\n  }\n  return clone;\n}\n\n/*static*/ const Config& Config::getDefault() {\n  static Config config{getDefaultLogger()};\n  return config;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/config/Config.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <bitset>\n\n#include <yoga/Yoga.h>\n#include <yoga/enums/Errata.h>\n#include <yoga/enums/ExperimentalFeature.h>\n#include <yoga/enums/LogLevel.h>\n\n// Tag struct used to form the opaque YGConfigRef for the public C API\nstruct YGConfig {};\n\nnamespace facebook::yoga {\n\nclass Config;\nclass Node;\n\nusing ExperimentalFeatureSet = std::bitset<ordinalCount<ExperimentalFeature>()>;\n\n// Whether moving a node from an old to new config should dirty previously\n// calculated layout results.\nbool configUpdateInvalidatesLayout(\n    const Config& oldConfig,\n    const Config& newConfig);\n\nclass YG_EXPORT Config : public ::YGConfig {\n public:\n  explicit Config(YGLogger logger) : logger_{logger} {}\n\n  void setUseWebDefaults(bool useWebDefaults);\n  bool useWebDefaults() const;\n\n  void setExperimentalFeatureEnabled(ExperimentalFeature feature, bool enabled);\n  bool isExperimentalFeatureEnabled(ExperimentalFeature feature) const;\n  ExperimentalFeatureSet getEnabledExperiments() const;\n\n  void setErrata(Errata errata);\n  void addErrata(Errata errata);\n  void removeErrata(Errata errata);\n  Errata getErrata() const;\n  bool hasErrata(Errata errata) const;\n\n  void setPointScaleFactor(float pointScaleFactor);\n  float getPointScaleFactor() const;\n\n  void setContext(void* context);\n  void* getContext() const;\n\n  uint32_t getVersion() const noexcept;\n\n  void setLogger(YGLogger logger);\n  void log(\n      const yoga::Node* node,\n      LogLevel logLevel,\n      const char* format,\n      va_list args) const;\n\n  void setCloneNodeCallback(YGCloneNodeFunc cloneNode);\n  YGNodeRef\n  cloneNode(YGNodeConstRef node, YGNodeConstRef owner, size_t childIndex) const;\n\n  static const Config& getDefault();\n\n private:\n  YGCloneNodeFunc cloneNodeCallback_{nullptr};\n  YGLogger logger_{};\n\n  bool useWebDefaults_ : 1 = false;\n\n  uint32_t version_ = 0;\n  ExperimentalFeatureSet experimentalFeatures_{};\n  Errata errata_ = Errata::None;\n  float pointScaleFactor_ = 1.0f;\n  void* context_ = nullptr;\n};\n\ninline Config* resolveRef(const YGConfigRef ref) {\n  return static_cast<Config*>(ref);\n}\n\ninline const Config* resolveRef(const YGConfigConstRef ref) {\n  return static_cast<const Config*>(ref);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/debug/AssertFatal.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <exception>\n#include <stdexcept>\n\n#include <yoga/config/Config.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/debug/Log.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\n[[noreturn]] void fatalWithMessage(const char* message) {\n#if defined(__cpp_exceptions)\n  throw std::logic_error(message);\n#else\n  static_cast<void>(message); // Unused\n  std::terminate();\n#endif\n}\n\nvoid assertFatal(const bool condition, const char* message) {\n  if (!condition) {\n    yoga::log(LogLevel::Fatal, \"%s\\n\", message);\n    fatalWithMessage(message);\n  }\n}\n\nvoid assertFatalWithNode(\n    const yoga::Node* const node,\n    const bool condition,\n    const char* message) {\n  if (!condition) {\n    yoga::log(node, LogLevel::Fatal, \"%s\\n\", message);\n    fatalWithMessage(message);\n  }\n}\n\nvoid assertFatalWithConfig(\n    const yoga::Config* const config,\n    const bool condition,\n    const char* message) {\n  if (!condition) {\n    yoga::log(config, LogLevel::Fatal, \"%s\\n\", message);\n    fatalWithMessage(message);\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/debug/AssertFatal.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nclass Node;\nclass Config;\n\n[[noreturn]] void fatalWithMessage(const char* message);\n\nvoid assertFatal(bool condition, const char* message);\nvoid assertFatalWithNode(\n    const yoga::Node* node,\n    bool condition,\n    const char* message);\nvoid assertFatalWithConfig(\n    const yoga::Config* config,\n    bool condition,\n    const char* message);\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/debug/Log.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <yoga/debug/Log.h>\n\n#ifdef ANDROID\n#include <android/log.h>\n#endif\n\nnamespace facebook::yoga {\n\nnamespace {\n\nvoid vlog(\n    const yoga::Config* config,\n    const yoga::Node* node,\n    LogLevel level,\n    const char* format,\n    va_list args) {\n  if (config == nullptr) {\n    getDefaultLogger()(nullptr, node, unscopedEnum(level), format, args);\n  } else {\n    config->log(node, level, format, args);\n  }\n}\n} // namespace\n\nvoid log(LogLevel level, const char* format, ...) noexcept {\n  va_list args;\n  va_start(args, format);\n  vlog(nullptr, nullptr, level, format, args);\n  va_end(args);\n}\n\nvoid log(\n    const yoga::Node* node,\n    LogLevel level,\n    const char* format,\n    ...) noexcept {\n  va_list args;\n  va_start(args, format);\n  vlog(\n      node == nullptr ? nullptr : node->getConfig(), node, level, format, args);\n  va_end(args);\n}\n\nvoid log(\n    const yoga::Config* config,\n    LogLevel level,\n    const char* format,\n    ...) noexcept {\n  va_list args;\n  va_start(args, format);\n  vlog(config, nullptr, level, format, args);\n  va_end(args);\n}\n\nYGLogger getDefaultLogger() {\n  return [](const YGConfigConstRef /*config*/,\n            const YGNodeConstRef /*node*/,\n            YGLogLevel level,\n            const char* format,\n            va_list args) -> int {\n#ifdef ANDROID\n    int androidLevel = YGLogLevelDebug;\n    switch (level) {\n      case YGLogLevelFatal:\n        androidLevel = ANDROID_LOG_FATAL;\n        break;\n      case YGLogLevelError:\n        androidLevel = ANDROID_LOG_ERROR;\n        break;\n      case YGLogLevelWarn:\n        androidLevel = ANDROID_LOG_WARN;\n        break;\n      case YGLogLevelInfo:\n        androidLevel = ANDROID_LOG_INFO;\n        break;\n      case YGLogLevelDebug:\n        androidLevel = ANDROID_LOG_DEBUG;\n        break;\n      case YGLogLevelVerbose:\n        androidLevel = ANDROID_LOG_VERBOSE;\n        break;\n    }\n    return __android_log_vprint(androidLevel, \"yoga\", format, args);\n#else\n    switch (level) {\n      case YGLogLevelError:\n      case YGLogLevelFatal:\n        return vfprintf(stderr, format, args);\n      case YGLogLevelWarn:\n      case YGLogLevelInfo:\n      case YGLogLevelDebug:\n      case YGLogLevelVerbose:\n      default:\n        return vprintf(format, args);\n    }\n#endif\n  };\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/debug/Log.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n\n#include <yoga/config/Config.h>\n#include <yoga/enums/LogLevel.h>\n#include <yoga/node/Node.h>\n\nnamespace facebook::yoga {\n\nvoid log(LogLevel level, const char* format, ...) noexcept;\n\nvoid log(\n    const yoga::Node* node,\n    LogLevel level,\n    const char* format,\n    ...) noexcept;\n\nvoid log(\n    const yoga::Config* config,\n    LogLevel level,\n    const char* format,\n    ...) noexcept;\n\nYGLogger getDefaultLogger();\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Align.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Align : uint8_t {\n  Auto = YGAlignAuto,\n  FlexStart = YGAlignFlexStart,\n  Center = YGAlignCenter,\n  FlexEnd = YGAlignFlexEnd,\n  Stretch = YGAlignStretch,\n  Baseline = YGAlignBaseline,\n  SpaceBetween = YGAlignSpaceBetween,\n  SpaceAround = YGAlignSpaceAround,\n  SpaceEvenly = YGAlignSpaceEvenly,\n  Start = YGAlignStart,\n  End = YGAlignEnd,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Align>() {\n  return 11;\n}\n\nconstexpr Align scopedEnum(YGAlign unscoped) {\n  return static_cast<Align>(unscoped);\n}\n\nconstexpr YGAlign unscopedEnum(Align scoped) {\n  return static_cast<YGAlign>(scoped);\n}\n\ninline const char* toString(Align e) {\n  return YGAlignToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/BoxSizing.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class BoxSizing : uint8_t {\n  BorderBox = YGBoxSizingBorderBox,\n  ContentBox = YGBoxSizingContentBox,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<BoxSizing>() {\n  return 2;\n}\n\nconstexpr BoxSizing scopedEnum(YGBoxSizing unscoped) {\n  return static_cast<BoxSizing>(unscoped);\n}\n\nconstexpr YGBoxSizing unscopedEnum(BoxSizing scoped) {\n  return static_cast<YGBoxSizing>(scoped);\n}\n\ninline const char* toString(BoxSizing e) {\n  return YGBoxSizingToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Dimension.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Dimension : uint8_t {\n  Width = YGDimensionWidth,\n  Height = YGDimensionHeight,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Dimension>() {\n  return 2;\n}\n\nconstexpr Dimension scopedEnum(YGDimension unscoped) {\n  return static_cast<Dimension>(unscoped);\n}\n\nconstexpr YGDimension unscopedEnum(Dimension scoped) {\n  return static_cast<YGDimension>(scoped);\n}\n\ninline const char* toString(Dimension e) {\n  return YGDimensionToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Direction.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Direction : uint8_t {\n  Inherit = YGDirectionInherit,\n  LTR = YGDirectionLTR,\n  RTL = YGDirectionRTL,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Direction>() {\n  return 3;\n}\n\nconstexpr Direction scopedEnum(YGDirection unscoped) {\n  return static_cast<Direction>(unscoped);\n}\n\nconstexpr YGDirection unscopedEnum(Direction scoped) {\n  return static_cast<YGDirection>(scoped);\n}\n\ninline const char* toString(Direction e) {\n  return YGDirectionToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Display.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Display : uint8_t {\n  Flex = YGDisplayFlex,\n  None = YGDisplayNone,\n  Contents = YGDisplayContents,\n  Grid = YGDisplayGrid,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Display>() {\n  return 4;\n}\n\nconstexpr Display scopedEnum(YGDisplay unscoped) {\n  return static_cast<Display>(unscoped);\n}\n\nconstexpr YGDisplay unscopedEnum(Display scoped) {\n  return static_cast<YGDisplay>(scoped);\n}\n\ninline const char* toString(Display e) {\n  return YGDisplayToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Edge.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Edge : uint8_t {\n  Left = YGEdgeLeft,\n  Top = YGEdgeTop,\n  Right = YGEdgeRight,\n  Bottom = YGEdgeBottom,\n  Start = YGEdgeStart,\n  End = YGEdgeEnd,\n  Horizontal = YGEdgeHorizontal,\n  Vertical = YGEdgeVertical,\n  All = YGEdgeAll,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Edge>() {\n  return 9;\n}\n\nconstexpr Edge scopedEnum(YGEdge unscoped) {\n  return static_cast<Edge>(unscoped);\n}\n\nconstexpr YGEdge unscopedEnum(Edge scoped) {\n  return static_cast<YGEdge>(scoped);\n}\n\ninline const char* toString(Edge e) {\n  return YGEdgeToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Errata.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Errata : uint32_t {\n  None = YGErrataNone,\n  StretchFlexBasis = YGErrataStretchFlexBasis,\n  AbsolutePositionWithoutInsetsExcludesPadding = YGErrataAbsolutePositionWithoutInsetsExcludesPadding,\n  AbsolutePercentAgainstInnerSize = YGErrataAbsolutePercentAgainstInnerSize,\n  All = YGErrataAll,\n  Classic = YGErrataClassic,\n};\n\nYG_DEFINE_ENUM_FLAG_OPERATORS(Errata)\n\nconstexpr Errata scopedEnum(YGErrata unscoped) {\n  return static_cast<Errata>(unscoped);\n}\n\nconstexpr YGErrata unscopedEnum(Errata scoped) {\n  return static_cast<YGErrata>(scoped);\n}\n\ninline const char* toString(Errata e) {\n  return YGErrataToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/ExperimentalFeature.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class ExperimentalFeature : uint8_t {\n  WebFlexBasis = YGExperimentalFeatureWebFlexBasis,\n  FixFlexBasisFitContent = YGExperimentalFeatureFixFlexBasisFitContent,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<ExperimentalFeature>() {\n  return 2;\n}\n\nconstexpr ExperimentalFeature scopedEnum(YGExperimentalFeature unscoped) {\n  return static_cast<ExperimentalFeature>(unscoped);\n}\n\nconstexpr YGExperimentalFeature unscopedEnum(ExperimentalFeature scoped) {\n  return static_cast<YGExperimentalFeature>(scoped);\n}\n\ninline const char* toString(ExperimentalFeature e) {\n  return YGExperimentalFeatureToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/FlexDirection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class FlexDirection : uint8_t {\n  Column = YGFlexDirectionColumn,\n  ColumnReverse = YGFlexDirectionColumnReverse,\n  Row = YGFlexDirectionRow,\n  RowReverse = YGFlexDirectionRowReverse,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<FlexDirection>() {\n  return 4;\n}\n\nconstexpr FlexDirection scopedEnum(YGFlexDirection unscoped) {\n  return static_cast<FlexDirection>(unscoped);\n}\n\nconstexpr YGFlexDirection unscopedEnum(FlexDirection scoped) {\n  return static_cast<YGFlexDirection>(scoped);\n}\n\ninline const char* toString(FlexDirection e) {\n  return YGFlexDirectionToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/GridTrackType.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class GridTrackType : uint8_t {\n  Auto = YGGridTrackTypeAuto,\n  Points = YGGridTrackTypePoints,\n  Percent = YGGridTrackTypePercent,\n  Fr = YGGridTrackTypeFr,\n  Minmax = YGGridTrackTypeMinmax,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<GridTrackType>() {\n  return 5;\n}\n\nconstexpr GridTrackType scopedEnum(YGGridTrackType unscoped) {\n  return static_cast<GridTrackType>(unscoped);\n}\n\nconstexpr YGGridTrackType unscopedEnum(GridTrackType scoped) {\n  return static_cast<YGGridTrackType>(scoped);\n}\n\ninline const char* toString(GridTrackType e) {\n  return YGGridTrackTypeToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Gutter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Gutter : uint8_t {\n  Column = YGGutterColumn,\n  Row = YGGutterRow,\n  All = YGGutterAll,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Gutter>() {\n  return 3;\n}\n\nconstexpr Gutter scopedEnum(YGGutter unscoped) {\n  return static_cast<Gutter>(unscoped);\n}\n\nconstexpr YGGutter unscopedEnum(Gutter scoped) {\n  return static_cast<YGGutter>(scoped);\n}\n\ninline const char* toString(Gutter e) {\n  return YGGutterToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Justify.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Justify : uint8_t {\n  Auto = YGJustifyAuto,\n  FlexStart = YGJustifyFlexStart,\n  Center = YGJustifyCenter,\n  FlexEnd = YGJustifyFlexEnd,\n  SpaceBetween = YGJustifySpaceBetween,\n  SpaceAround = YGJustifySpaceAround,\n  SpaceEvenly = YGJustifySpaceEvenly,\n  Stretch = YGJustifyStretch,\n  Start = YGJustifyStart,\n  End = YGJustifyEnd,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Justify>() {\n  return 10;\n}\n\nconstexpr Justify scopedEnum(YGJustify unscoped) {\n  return static_cast<Justify>(unscoped);\n}\n\nconstexpr YGJustify unscopedEnum(Justify scoped) {\n  return static_cast<YGJustify>(scoped);\n}\n\ninline const char* toString(Justify e) {\n  return YGJustifyToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/LogLevel.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class LogLevel : uint8_t {\n  Error = YGLogLevelError,\n  Warn = YGLogLevelWarn,\n  Info = YGLogLevelInfo,\n  Debug = YGLogLevelDebug,\n  Verbose = YGLogLevelVerbose,\n  Fatal = YGLogLevelFatal,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<LogLevel>() {\n  return 6;\n}\n\nconstexpr LogLevel scopedEnum(YGLogLevel unscoped) {\n  return static_cast<LogLevel>(unscoped);\n}\n\nconstexpr YGLogLevel unscopedEnum(LogLevel scoped) {\n  return static_cast<YGLogLevel>(scoped);\n}\n\ninline const char* toString(LogLevel e) {\n  return YGLogLevelToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/MeasureMode.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class MeasureMode : uint8_t {\n  Undefined = YGMeasureModeUndefined,\n  Exactly = YGMeasureModeExactly,\n  AtMost = YGMeasureModeAtMost,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<MeasureMode>() {\n  return 3;\n}\n\nconstexpr MeasureMode scopedEnum(YGMeasureMode unscoped) {\n  return static_cast<MeasureMode>(unscoped);\n}\n\nconstexpr YGMeasureMode unscopedEnum(MeasureMode scoped) {\n  return static_cast<YGMeasureMode>(scoped);\n}\n\ninline const char* toString(MeasureMode e) {\n  return YGMeasureModeToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/NodeType.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class NodeType : uint8_t {\n  Default = YGNodeTypeDefault,\n  Text = YGNodeTypeText,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<NodeType>() {\n  return 2;\n}\n\nconstexpr NodeType scopedEnum(YGNodeType unscoped) {\n  return static_cast<NodeType>(unscoped);\n}\n\nconstexpr YGNodeType unscopedEnum(NodeType scoped) {\n  return static_cast<YGNodeType>(scoped);\n}\n\ninline const char* toString(NodeType e) {\n  return YGNodeTypeToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Overflow.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Overflow : uint8_t {\n  Visible = YGOverflowVisible,\n  Hidden = YGOverflowHidden,\n  Scroll = YGOverflowScroll,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Overflow>() {\n  return 3;\n}\n\nconstexpr Overflow scopedEnum(YGOverflow unscoped) {\n  return static_cast<Overflow>(unscoped);\n}\n\nconstexpr YGOverflow unscopedEnum(Overflow scoped) {\n  return static_cast<YGOverflow>(scoped);\n}\n\ninline const char* toString(Overflow e) {\n  return YGOverflowToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/PhysicalEdge.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/enums/Edge.h>\n\nnamespace facebook::yoga {\n\nenum class PhysicalEdge : uint32_t {\n  Left = yoga::to_underlying(Edge::Left),\n  Top = yoga::to_underlying(Edge::Top),\n  Right = yoga::to_underlying(Edge::Right),\n  Bottom = yoga::to_underlying(Edge::Bottom),\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/PositionType.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class PositionType : uint8_t {\n  Static = YGPositionTypeStatic,\n  Relative = YGPositionTypeRelative,\n  Absolute = YGPositionTypeAbsolute,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<PositionType>() {\n  return 3;\n}\n\nconstexpr PositionType scopedEnum(YGPositionType unscoped) {\n  return static_cast<PositionType>(unscoped);\n}\n\nconstexpr YGPositionType unscopedEnum(PositionType scoped) {\n  return static_cast<YGPositionType>(scoped);\n}\n\ninline const char* toString(PositionType e) {\n  return YGPositionTypeToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Unit.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Unit : uint8_t {\n  Undefined = YGUnitUndefined,\n  Point = YGUnitPoint,\n  Percent = YGUnitPercent,\n  Auto = YGUnitAuto,\n  MaxContent = YGUnitMaxContent,\n  FitContent = YGUnitFitContent,\n  Stretch = YGUnitStretch,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Unit>() {\n  return 7;\n}\n\nconstexpr Unit scopedEnum(YGUnit unscoped) {\n  return static_cast<Unit>(unscoped);\n}\n\nconstexpr YGUnit unscopedEnum(Unit scoped) {\n  return static_cast<YGUnit>(scoped);\n}\n\ninline const char* toString(Unit e) {\n  return YGUnitToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/Wrap.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n// clang-format off\n#pragma once\n\n#include <cstdint>\n#include <yoga/YGEnums.h>\n#include <yoga/enums/YogaEnums.h>\n\nnamespace facebook::yoga {\n\nenum class Wrap : uint8_t {\n  NoWrap = YGWrapNoWrap,\n  Wrap = YGWrapWrap,\n  WrapReverse = YGWrapWrapReverse,\n};\n\ntemplate <>\nconstexpr int32_t ordinalCount<Wrap>() {\n  return 3;\n}\n\nconstexpr Wrap scopedEnum(YGWrap unscoped) {\n  return static_cast<Wrap>(unscoped);\n}\n\nconstexpr YGWrap unscopedEnum(Wrap scoped) {\n  return static_cast<YGWrap>(scoped);\n}\n\ninline const char* toString(Wrap e) {\n  return YGWrapToString(unscopedEnum(e));\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/enums/YogaEnums.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <bit>\n#include <iterator>\n#include <type_traits>\n\nnamespace facebook::yoga {\n\n/**\n * Concept for any enum/enum class\n */\ntemplate <typename EnumT>\nconcept Enumeration = std::is_enum_v<EnumT>;\n\n/**\n * Count of ordinals in a Yoga enum which is sequential\n */\ntemplate <Enumeration EnumT>\nconstexpr int32_t ordinalCount();\n\n/**\n * Concept for a yoga enum which is sequential\n */\ntemplate <typename EnumT>\nconcept HasOrdinality = (ordinalCount<EnumT>() > 0);\n\n/**\n * Count of bits needed to represent every ordinal\n */\ntemplate <HasOrdinality EnumT>\nconstexpr int32_t bitCount() {\n  return std::bit_width(\n      static_cast<std::underlying_type_t<EnumT>>(ordinalCount<EnumT>() - 1));\n}\n\n/**\n * Polyfill of C++ 23 to_underlying()\n * https://en.cppreference.com/w/cpp/utility/to_underlying\n */\nconstexpr auto to_underlying(Enumeration auto e) noexcept {\n  return static_cast<std::underlying_type_t<decltype(e)>>(e);\n}\n\n/**\n * Convenience function to iterate through every value in a Yoga enum as part of\n * a range-based for loop.\n */\ntemplate <HasOrdinality EnumT>\nauto ordinals() {\n  struct Iterator {\n    EnumT e{};\n\n    EnumT operator*() const {\n      return e;\n    }\n\n    Iterator& operator++() {\n      e = static_cast<EnumT>(to_underlying(e) + 1);\n      return *this;\n    }\n\n    bool operator==(const Iterator& other) const = default;\n  };\n\n  struct Range {\n    Iterator begin() const {\n      return Iterator{};\n    }\n    Iterator end() const {\n      return Iterator{static_cast<EnumT>(ordinalCount<EnumT>())};\n    }\n  };\n\n  return Range{};\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/event/event.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"event.h\"\n#include <atomic>\n#include <memory>\n\nnamespace facebook::yoga {\n\nconst char* LayoutPassReasonToString(const LayoutPassReason value) {\n  switch (value) {\n    case LayoutPassReason::kInitial:\n      return \"initial\";\n    case LayoutPassReason::kAbsLayout:\n      return \"abs_layout\";\n    case LayoutPassReason::kStretch:\n      return \"stretch\";\n    case LayoutPassReason::kMultilineStretch:\n      return \"multiline_stretch\";\n    case LayoutPassReason::kFlexLayout:\n      return \"flex_layout\";\n    case LayoutPassReason::kMeasureChild:\n      return \"measure\";\n    case LayoutPassReason::kAbsMeasureChild:\n      return \"abs_measure\";\n    case LayoutPassReason::kFlexMeasure:\n      return \"flex_measure\";\n    case LayoutPassReason::kGridLayout:\n      return \"grid_layout\";\n    default:\n      return \"unknown\";\n  }\n}\n\nnamespace {\n\nstruct Node {\n  std::function<Event::Subscriber> subscriber = nullptr;\n  Node* next = nullptr;\n\n  explicit Node(std::function<Event::Subscriber>&& subscriber)\n      : subscriber{std::move(subscriber)} {}\n};\n\nstd::atomic<Node*> subscribers{nullptr};\n\nNode* push(Node* newHead) {\n  Node* oldHead = nullptr;\n  do {\n    oldHead = subscribers.load(std::memory_order_relaxed);\n    if (newHead != nullptr) {\n      newHead->next = oldHead;\n    }\n  } while (!subscribers.compare_exchange_weak(\n      oldHead, newHead, std::memory_order_release, std::memory_order_relaxed));\n  return oldHead;\n}\n\n} // namespace\n\nvoid Event::reset() {\n  auto head = push(nullptr);\n  while (head != nullptr) {\n    auto current = head;\n    head = head->next;\n    delete current;\n  }\n}\n\nvoid Event::subscribe(std::function<Subscriber>&& subscriber) {\n  push(new Node{std::move(subscriber)});\n}\n\nvoid Event::publish(\n    YGNodeConstRef node,\n    Type eventType,\n    const Data& eventData) {\n  for (auto subscriber = subscribers.load(std::memory_order_relaxed);\n       subscriber != nullptr;\n       subscriber = subscriber->next) {\n    subscriber->subscriber(node, eventType, eventData);\n  }\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/event/event.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/Yoga.h>\n\n#include <array>\n#include <cstdint>\n#include <functional>\n#include <vector>\n\nnamespace facebook::yoga {\n\nenum struct LayoutType : int {\n  kLayout = 0,\n  kMeasure = 1,\n  kCachedLayout = 2,\n  kCachedMeasure = 3\n};\n\nenum struct LayoutPassReason : int {\n  kInitial = 0,\n  kAbsLayout = 1,\n  kStretch = 2,\n  kMultilineStretch = 3,\n  kFlexLayout = 4,\n  kMeasureChild = 5,\n  kAbsMeasureChild = 6,\n  kFlexMeasure = 7,\n  kGridLayout = 8,\n  COUNT\n};\n\nstruct LayoutData {\n  int layouts = 0;\n  int measures = 0;\n  uint32_t maxMeasureCache = 0;\n  int cachedLayouts = 0;\n  int cachedMeasures = 0;\n  int measureCallbacks = 0;\n  std::array<int, static_cast<uint8_t>(LayoutPassReason::COUNT)>\n      measureCallbackReasonsCount;\n};\n\nconst char* LayoutPassReasonToString(LayoutPassReason value);\n\nstruct YG_EXPORT Event {\n  enum Type {\n    NodeAllocation,\n    NodeDeallocation,\n    NodeLayout,\n    LayoutPassStart,\n    LayoutPassEnd,\n    MeasureCallbackStart,\n    MeasureCallbackEnd,\n    NodeBaselineStart,\n    NodeBaselineEnd,\n  };\n  class Data;\n  using Subscriber = void(YGNodeConstRef, Type, Data);\n  using Subscribers = std::vector<std::function<Subscriber>>;\n\n  template <Type E>\n  struct TypedData {};\n\n  class Data {\n    const void* data_;\n\n   public:\n    template <Type E>\n    explicit Data(const TypedData<E>& data) : data_{&data} {}\n\n    template <Type E>\n    const TypedData<E>& get() const {\n      return *static_cast<const TypedData<E>*>(data_);\n    }\n  };\n\n  static void reset();\n\n  static void subscribe(std::function<Subscriber>&& subscriber);\n\n  template <Type E>\n  static void publish(YGNodeConstRef node, const TypedData<E>& eventData = {}) {\n    publish(node, E, Data{eventData});\n  }\n\n private:\n  static void publish(\n      YGNodeConstRef /*node*/,\n      Type /*eventType*/,\n      const Data& /*eventData*/);\n};\n\ntemplate <>\nstruct Event::TypedData<Event::NodeAllocation> {\n  YGConfigConstRef config;\n};\n\ntemplate <>\nstruct Event::TypedData<Event::NodeDeallocation> {\n  YGConfigConstRef config;\n};\n\ntemplate <>\nstruct Event::TypedData<Event::LayoutPassEnd> {\n  LayoutData* layoutData;\n};\n\ntemplate <>\nstruct Event::TypedData<Event::MeasureCallbackEnd> {\n  float width;\n  YGMeasureMode widthMeasureMode;\n  float height;\n  YGMeasureMode heightMeasureMode;\n  float measuredWidth;\n  float measuredHeight;\n  const LayoutPassReason reason;\n};\n\ntemplate <>\nstruct Event::TypedData<Event::NodeLayout> {\n  LayoutType layoutType;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/module.modulemap",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule yoga [system] {\n    module core {\n        header \"YGConfig.h\"\n        header \"YGEnums.h\"\n        header \"YGMacros.h\"\n        header \"YGNode.h\"\n        header \"YGNodeLayout.h\"\n        header \"YGNodeStyle.h\"\n        header \"YGPixelGrid.h\"\n        header \"YGValue.h\"\n        header \"Yoga.h\"\n        export *\n    }\n}\n"
  },
  {
    "path": "yoga/node/CachedMeasurement.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cmath>\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/SizingMode.h>\n#include <yoga/numeric/Comparison.h>\n\nnamespace facebook::yoga {\n\nstruct CachedMeasurement {\n  float availableWidth{-1};\n  float availableHeight{-1};\n  SizingMode widthSizingMode{SizingMode::MaxContent};\n  SizingMode heightSizingMode{SizingMode::MaxContent};\n\n  float computedWidth{-1};\n  float computedHeight{-1};\n\n  bool operator==(CachedMeasurement measurement) const {\n    bool isEqual = widthSizingMode == measurement.widthSizingMode &&\n        heightSizingMode == measurement.heightSizingMode;\n\n    if (!yoga::isUndefined(availableWidth) ||\n        !yoga::isUndefined(measurement.availableWidth)) {\n      isEqual = isEqual && availableWidth == measurement.availableWidth;\n    }\n    if (!yoga::isUndefined(availableHeight) ||\n        !yoga::isUndefined(measurement.availableHeight)) {\n      isEqual = isEqual && availableHeight == measurement.availableHeight;\n    }\n    if (!yoga::isUndefined(computedWidth) ||\n        !yoga::isUndefined(measurement.computedWidth)) {\n      isEqual = isEqual && computedWidth == measurement.computedWidth;\n    }\n    if (!yoga::isUndefined(computedHeight) ||\n        !yoga::isUndefined(measurement.computedHeight)) {\n      isEqual = isEqual && computedHeight == measurement.computedHeight;\n    }\n\n    return isEqual;\n  }\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/node/LayoutResults.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <cmath>\n\n#include <yoga/node/LayoutResults.h>\n#include <yoga/numeric/Comparison.h>\n\nnamespace facebook::yoga {\n\nbool LayoutResults::operator==(LayoutResults layout) const {\n  bool isEqual = yoga::inexactEquals(position_, layout.position_) &&\n      yoga::inexactEquals(dimensions_, layout.dimensions_) &&\n      yoga::inexactEquals(margin_, layout.margin_) &&\n      yoga::inexactEquals(border_, layout.border_) &&\n      yoga::inexactEquals(padding_, layout.padding_) &&\n      direction() == layout.direction() &&\n      hadOverflow() == layout.hadOverflow() &&\n      lastOwnerDirection == layout.lastOwnerDirection &&\n      configVersion == layout.configVersion &&\n      nextCachedMeasurementsIndex == layout.nextCachedMeasurementsIndex &&\n      cachedLayout == layout.cachedLayout &&\n      computedFlexBasis == layout.computedFlexBasis;\n\n  for (uint32_t i = 0; i < LayoutResults::MaxCachedMeasurements && isEqual;\n       ++i) {\n    isEqual = isEqual && cachedMeasurements[i] == layout.cachedMeasurements[i];\n  }\n\n  if (!yoga::isUndefined(measuredDimensions_[0]) ||\n      !yoga::isUndefined(layout.measuredDimensions_[0])) {\n    isEqual =\n        isEqual && (measuredDimensions_[0] == layout.measuredDimensions_[0]);\n  }\n  if (!yoga::isUndefined(measuredDimensions_[1]) ||\n      !yoga::isUndefined(layout.measuredDimensions_[1])) {\n    isEqual =\n        isEqual && (measuredDimensions_[1] == layout.measuredDimensions_[1]);\n  }\n\n  return isEqual;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/node/LayoutResults.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <array>\n\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/enums/Dimension.h>\n#include <yoga/enums/Direction.h>\n#include <yoga/enums/Edge.h>\n#include <yoga/enums/PhysicalEdge.h>\n#include <yoga/node/CachedMeasurement.h>\n#include <yoga/numeric/FloatOptional.h>\n\nnamespace facebook::yoga {\n\nstruct LayoutResults {\n  // This value was chosen based on empirical data:\n  // 98% of analyzed layouts require less than 8 entries.\n  static constexpr int32_t MaxCachedMeasurements = 8;\n\n  uint32_t computedFlexBasisGeneration = 0;\n  FloatOptional computedFlexBasis = {};\n\n  // Instead of recomputing the entire layout every single time, we cache some\n  // information to break early when nothing changed\n  uint32_t generationCount = 0;\n  uint32_t configVersion = 0;\n  Direction lastOwnerDirection = Direction::Inherit;\n\n  uint32_t nextCachedMeasurementsIndex = 0;\n  std::array<CachedMeasurement, MaxCachedMeasurements> cachedMeasurements = {};\n\n  CachedMeasurement cachedLayout{};\n\n  Direction direction() const {\n    return direction_;\n  }\n\n  void setDirection(Direction direction) {\n    direction_ = direction;\n  }\n\n  bool hadOverflow() const {\n    return hadOverflow_;\n  }\n\n  void setHadOverflow(bool hadOverflow) {\n    hadOverflow_ = hadOverflow;\n  }\n\n  float dimension(Dimension axis) const {\n    return dimensions_[yoga::to_underlying(axis)];\n  }\n\n  void setDimension(Dimension axis, float dimension) {\n    dimensions_[yoga::to_underlying(axis)] = dimension;\n  }\n\n  float measuredDimension(Dimension axis) const {\n    return measuredDimensions_[yoga::to_underlying(axis)];\n  }\n\n  float rawDimension(Dimension axis) const {\n    return rawDimensions_[yoga::to_underlying(axis)];\n  }\n\n  void setMeasuredDimension(Dimension axis, float dimension) {\n    measuredDimensions_[yoga::to_underlying(axis)] = dimension;\n  }\n\n  void setRawDimension(Dimension axis, float dimension) {\n    rawDimensions_[yoga::to_underlying(axis)] = dimension;\n  }\n\n  float position(PhysicalEdge physicalEdge) const {\n    return position_[yoga::to_underlying(physicalEdge)];\n  }\n\n  void setPosition(PhysicalEdge physicalEdge, float dimension) {\n    position_[yoga::to_underlying(physicalEdge)] = dimension;\n  }\n\n  float margin(PhysicalEdge physicalEdge) const {\n    return margin_[yoga::to_underlying(physicalEdge)];\n  }\n\n  void setMargin(PhysicalEdge physicalEdge, float dimension) {\n    margin_[yoga::to_underlying(physicalEdge)] = dimension;\n  }\n\n  float border(PhysicalEdge physicalEdge) const {\n    return border_[yoga::to_underlying(physicalEdge)];\n  }\n\n  void setBorder(PhysicalEdge physicalEdge, float dimension) {\n    border_[yoga::to_underlying(physicalEdge)] = dimension;\n  }\n\n  float padding(PhysicalEdge physicalEdge) const {\n    return padding_[yoga::to_underlying(physicalEdge)];\n  }\n\n  void setPadding(PhysicalEdge physicalEdge, float dimension) {\n    padding_[yoga::to_underlying(physicalEdge)] = dimension;\n  }\n\n  bool operator==(LayoutResults layout) const;\n\n private:\n  Direction direction_ : bitCount<Direction>() = Direction::Inherit;\n  bool hadOverflow_ : 1 = false;\n\n  std::array<float, 2> dimensions_ = {{YGUndefined, YGUndefined}};\n  std::array<float, 2> measuredDimensions_ = {{YGUndefined, YGUndefined}};\n  std::array<float, 2> rawDimensions_ = {{YGUndefined, YGUndefined}};\n  std::array<float, 4> position_ = {};\n  std::array<float, 4> margin_ = {};\n  std::array<float, 4> border_ = {};\n  std::array<float, 4> padding_ = {};\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/node/LayoutableChildren.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdint>\n#include <forward_list>\n#include <utility>\n\n#include <yoga/enums/Display.h>\n\nnamespace facebook::yoga {\n\nclass Node;\n\ntemplate <typename T>\nclass LayoutableChildren {\n public:\n  struct Iterator {\n    using iterator_category = std::input_iterator_tag;\n    using difference_type = std::ptrdiff_t;\n    using value_type = T*;\n    using pointer = T*;\n    using reference = T*;\n\n    Iterator() = default;\n\n    Iterator(const T* node, size_t childIndex)\n        : node_(node), childIndex_(childIndex) {}\n\n    T* operator*() const {\n      return node_->getChild(childIndex_);\n    }\n\n    Iterator& operator++() {\n      next();\n      return *this;\n    }\n\n    Iterator operator++(int) {\n      Iterator tmp = *this;\n      ++(*this);\n      return tmp;\n    }\n\n    friend bool operator==(const Iterator& a, const Iterator& b) {\n      return a.node_ == b.node_ && a.childIndex_ == b.childIndex_;\n    }\n\n    friend bool operator!=(const Iterator& a, const Iterator& b) {\n      return a.node_ != b.node_ || a.childIndex_ != b.childIndex_;\n    }\n\n   private:\n    void next() {\n      if (childIndex_ + 1 >= node_->getChildCount()) {\n        // if the current node has no more children, try to backtrack and\n        // visit its successor\n        if (backtrack_.empty()) [[likely]] {\n          // if there are no nodes to backtrack to, the last node has been\n          // visited\n          *this = Iterator{};\n        } else {\n          // pop and restore the latest backtrack entry\n          const auto& back = backtrack_.front();\n          node_ = back.first;\n          childIndex_ = back.second;\n          backtrack_.pop_front();\n\n          // go to the next node\n          next();\n        }\n      } else {\n        // current node has more children to visit, go to next\n        ++childIndex_;\n        // skip all display: contents nodes, possibly going deeper into the\n        // tree\n        if (node_->getChild(childIndex_)->style().display() ==\n            Display::Contents) [[unlikely]] {\n          skipContentsNodes();\n        }\n      }\n    }\n\n    void skipContentsNodes() {\n      // get the node that would be returned from the iterator\n      auto currentNode = node_->getChild(childIndex_);\n      while (currentNode->style().display() == Display::Contents &&\n             currentNode->getChildCount() > 0) {\n        // if it has display: contents set, it shouldn't be returned but its\n        // children should in its place push the current node and child index\n        // so that the current state can be restored when backtracking\n        backtrack_.push_front({node_, childIndex_});\n        // traverse the child\n        node_ = currentNode;\n        childIndex_ = 0;\n\n        // repeat until a node without display: contents is found in the\n        // subtree or a leaf is reached\n        currentNode = currentNode->getChild(childIndex_);\n      }\n\n      // if no node without display: contents was found, try to backtrack\n      if (currentNode->style().display() == Display::Contents) {\n        next();\n      }\n    }\n\n    const T* node_{nullptr};\n    size_t childIndex_{0};\n    std::forward_list<std::pair<const T*, size_t>> backtrack_;\n\n    friend LayoutableChildren;\n  };\n\n  explicit LayoutableChildren(const T* node) : node_(node) {\n    static_assert(std::input_iterator<LayoutableChildren<T>::Iterator>);\n    static_assert(\n        std::is_base_of<Node, T>::value,\n        \"Type parameter of LayoutableChildren must derive from yoga::Node\");\n  }\n\n  Iterator begin() const {\n    if (node_->getChildCount() > 0) {\n      auto result = Iterator(node_, 0);\n      if (node_->getChild(0)->style().display() == Display::Contents)\n          [[unlikely]] {\n        result.skipContentsNodes();\n      }\n      return result;\n    } else {\n      return Iterator{};\n    }\n  }\n\n  Iterator end() const {\n    return Iterator{};\n  }\n\n private:\n  const T* node_;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/node/Node.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <algorithm>\n#include <cstddef>\n#include <iostream>\n\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/debug/AssertFatal.h>\n#include <yoga/debug/Log.h>\n#include <yoga/node/Node.h>\n#include <yoga/numeric/Comparison.h>\n\nnamespace facebook::yoga {\n\nNode::Node() : Node{&Config::getDefault()} {}\n\nNode::Node(const yoga::Config* config) : config_{config} {\n  yoga::assertFatal(\n      config != nullptr, \"Attempting to construct Node with null config\");\n\n  if (config->useWebDefaults()) {\n    useWebDefaults();\n  }\n}\n\nNode::Node(Node&& node) noexcept\n    : hasNewLayout_(node.hasNewLayout_),\n      isReferenceBaseline_(node.isReferenceBaseline_),\n      isDirty_(node.isDirty_),\n      alwaysFormsContainingBlock_(node.alwaysFormsContainingBlock_),\n      nodeType_(node.nodeType_),\n      context_(node.context_),\n      measureFunc_(node.measureFunc_),\n      baselineFunc_(node.baselineFunc_),\n      dirtiedFunc_(node.dirtiedFunc_),\n      style_(std::move(node.style_)),\n      layout_(node.layout_),\n      lineIndex_(node.lineIndex_),\n      contentsChildrenCount_(node.contentsChildrenCount_),\n      owner_(node.owner_),\n      children_(std::move(node.children_)),\n      config_(node.config_),\n      processedDimensions_(node.processedDimensions_) {\n  for (auto c : children_) {\n    c->setOwner(this);\n  }\n}\n\nYGSize Node::measure(\n    float availableWidth,\n    MeasureMode widthMode,\n    float availableHeight,\n    MeasureMode heightMode) {\n  const auto size = measureFunc_(\n      this,\n      availableWidth,\n      unscopedEnum(widthMode),\n      availableHeight,\n      unscopedEnum(heightMode));\n\n  if (yoga::isUndefined(size.height) || size.height < 0 ||\n      yoga::isUndefined(size.width) || size.width < 0) {\n    yoga::log(\n        this,\n        LogLevel::Warn,\n        \"Measure function returned an invalid dimension to Yoga: [width=%f, height=%f]\",\n        size.width,\n        size.height);\n    return {\n        .width = maxOrDefined(0.0f, size.width),\n        .height = maxOrDefined(0.0f, size.height)};\n  }\n\n  return size;\n}\n\nfloat Node::baseline(float width, float height) const {\n  return baselineFunc_(this, width, height);\n}\n\nfloat Node::dimensionWithMargin(\n    const FlexDirection axis,\n    const float widthSize) {\n  return getLayout().measuredDimension(dimension(axis)) +\n      style_.computeMarginForAxis(axis, widthSize);\n}\n\nbool Node::isLayoutDimensionDefined(const FlexDirection axis) {\n  const float value = getLayout().measuredDimension(dimension(axis));\n  return yoga::isDefined(value) && value >= 0.0f;\n}\n\n// Setters\n\nvoid Node::setMeasureFunc(YGMeasureFunc measureFunc) {\n  if (measureFunc == nullptr) {\n    // TODO: t18095186 Move nodeType to opt-in function and mark appropriate\n    // places in Litho\n    setNodeType(NodeType::Default);\n  } else {\n    yoga::assertFatalWithNode(\n        this,\n        children_.empty(),\n        \"Cannot set measure function: Nodes with measure functions cannot have \"\n        \"children.\");\n    // TODO: t18095186 Move nodeType to opt-in function and mark appropriate\n    // places in Litho\n    setNodeType(NodeType::Text);\n  }\n\n  measureFunc_ = measureFunc;\n}\n\nvoid Node::replaceChild(Node* child, size_t index) {\n  auto previousChild = children_[index];\n  if (previousChild->style().display() == Display::Contents &&\n      child->style().display() != Display::Contents) {\n    contentsChildrenCount_--;\n  } else if (\n      previousChild->style().display() != Display::Contents &&\n      child->style().display() == Display::Contents) {\n    contentsChildrenCount_++;\n  }\n\n  children_[index] = child;\n}\n\nvoid Node::replaceChild(Node* oldChild, Node* newChild) {\n  if (oldChild->style().display() == Display::Contents &&\n      newChild->style().display() != Display::Contents) {\n    contentsChildrenCount_--;\n  } else if (\n      oldChild->style().display() != Display::Contents &&\n      newChild->style().display() == Display::Contents) {\n    contentsChildrenCount_++;\n  }\n\n  std::replace(children_.begin(), children_.end(), oldChild, newChild);\n}\n\nvoid Node::insertChild(Node* child, size_t index) {\n  if (child->style().display() == Display::Contents) {\n    contentsChildrenCount_++;\n  }\n\n  children_.insert(children_.begin() + static_cast<ptrdiff_t>(index), child);\n}\n\nvoid Node::setConfig(yoga::Config* config) {\n  yoga::assertFatal(\n      config != nullptr, \"Attempting to set a null config on a Node\");\n  yoga::assertFatalWithConfig(\n      config,\n      config->useWebDefaults() == config_->useWebDefaults(),\n      \"UseWebDefaults may not be changed after constructing a Node\");\n\n  if (yoga::configUpdateInvalidatesLayout(*config_, *config)) {\n    markDirtyAndPropagate();\n    layout_.configVersion = 0;\n  } else {\n    // If the config is functionally the same, then align the configVersion so\n    // that we can reuse the layout cache\n    layout_.configVersion = config->getVersion();\n  }\n\n  config_ = config;\n}\n\nvoid Node::setDirty(bool isDirty) {\n  if (static_cast<int>(isDirty) == isDirty_) {\n    return;\n  }\n  isDirty_ = isDirty;\n  if (isDirty && (dirtiedFunc_ != nullptr)) {\n    dirtiedFunc_(this);\n  }\n}\n\nvoid Node::setChildren(const std::vector<Node*>& children) {\n  children_ = children;\n\n  contentsChildrenCount_ = 0;\n  for (const auto& child : children) {\n    if (child->style().display() == Display::Contents) {\n      contentsChildrenCount_++;\n    }\n  }\n}\n\nbool Node::removeChild(Node* child) {\n  auto p = std::find(children_.begin(), children_.end(), child);\n  if (p != children_.end()) {\n    if (child->style().display() == Display::Contents) {\n      contentsChildrenCount_--;\n    }\n\n    children_.erase(p);\n    return true;\n  }\n  return false;\n}\n\nvoid Node::removeChild(size_t index) {\n  if (children_[index]->style().display() == Display::Contents) {\n    contentsChildrenCount_--;\n  }\n\n  children_.erase(children_.begin() + static_cast<ptrdiff_t>(index));\n}\n\nvoid Node::setLayoutDirection(Direction direction) {\n  layout_.setDirection(direction);\n}\n\nvoid Node::setLayoutMargin(float margin, PhysicalEdge edge) {\n  layout_.setMargin(edge, margin);\n}\n\nvoid Node::setLayoutBorder(float border, PhysicalEdge edge) {\n  layout_.setBorder(edge, border);\n}\n\nvoid Node::setLayoutPadding(float padding, PhysicalEdge edge) {\n  layout_.setPadding(edge, padding);\n}\n\nvoid Node::setLayoutLastOwnerDirection(Direction direction) {\n  layout_.lastOwnerDirection = direction;\n}\n\nvoid Node::setLayoutComputedFlexBasis(const FloatOptional computedFlexBasis) {\n  layout_.computedFlexBasis = computedFlexBasis;\n}\n\nvoid Node::setLayoutPosition(float position, PhysicalEdge edge) {\n  layout_.setPosition(edge, position);\n}\n\nvoid Node::setLayoutComputedFlexBasisGeneration(\n    uint32_t computedFlexBasisGeneration) {\n  layout_.computedFlexBasisGeneration = computedFlexBasisGeneration;\n}\n\nvoid Node::setLayoutMeasuredDimension(\n    float measuredDimension,\n    Dimension dimension) {\n  layout_.setMeasuredDimension(dimension, measuredDimension);\n}\n\nvoid Node::setLayoutHadOverflow(bool hadOverflow) {\n  layout_.setHadOverflow(hadOverflow);\n}\n\nvoid Node::setLayoutDimension(float lengthValue, Dimension dimension) {\n  layout_.setDimension(dimension, lengthValue);\n  layout_.setRawDimension(dimension, lengthValue);\n}\n\n// If both left and right are defined, then use left. Otherwise return +left or\n// -right depending on which is defined. Ignore statically positioned nodes as\n// insets do not apply to them.\nfloat Node::relativePosition(\n    FlexDirection axis,\n    Direction direction,\n    float axisSize) const {\n  if (style_.positionType() == PositionType::Static) {\n    return 0;\n  }\n  if (style_.isInlineStartPositionDefined(axis, direction) &&\n      !style_.isInlineStartPositionAuto(axis, direction)) {\n    return style_.computeInlineStartPosition(axis, direction, axisSize);\n  }\n\n  return -1 * style_.computeInlineEndPosition(axis, direction, axisSize);\n}\n\nvoid Node::setPosition(\n    const Direction direction,\n    const float ownerWidth,\n    const float ownerHeight) {\n  /* Root nodes should be always layouted as LTR, so we don't return negative\n   * values. */\n  const Direction directionRespectingRoot =\n      owner_ != nullptr ? direction : Direction::LTR;\n  const FlexDirection mainAxis =\n      yoga::resolveDirection(style_.flexDirection(), directionRespectingRoot);\n  const FlexDirection crossAxis =\n      yoga::resolveCrossDirection(mainAxis, directionRespectingRoot);\n\n  // In the case of position static these are just 0. See:\n  // https://www.w3.org/TR/css-position-3/#valdef-position-static\n  const float relativePositionMain = relativePosition(\n      mainAxis,\n      directionRespectingRoot,\n      isRow(mainAxis) ? ownerWidth : ownerHeight);\n  const float relativePositionCross = relativePosition(\n      crossAxis,\n      directionRespectingRoot,\n      isRow(mainAxis) ? ownerHeight : ownerWidth);\n\n  const auto mainAxisLeadingEdge = inlineStartEdge(mainAxis, direction);\n  const auto mainAxisTrailingEdge = inlineEndEdge(mainAxis, direction);\n  const auto crossAxisLeadingEdge = inlineStartEdge(crossAxis, direction);\n  const auto crossAxisTrailingEdge = inlineEndEdge(crossAxis, direction);\n\n  setLayoutPosition(\n      (style_.computeInlineStartMargin(mainAxis, direction, ownerWidth) +\n       relativePositionMain),\n      mainAxisLeadingEdge);\n  setLayoutPosition(\n      (style_.computeInlineEndMargin(mainAxis, direction, ownerWidth) +\n       relativePositionMain),\n      mainAxisTrailingEdge);\n  setLayoutPosition(\n      (style_.computeInlineStartMargin(crossAxis, direction, ownerWidth) +\n       relativePositionCross),\n      crossAxisLeadingEdge);\n  setLayoutPosition(\n      (style_.computeInlineEndMargin(crossAxis, direction, ownerWidth) +\n       relativePositionCross),\n      crossAxisTrailingEdge);\n}\n\nStyle::SizeLength Node::processFlexBasis() const {\n  Style::SizeLength flexBasis = style_.flexBasis();\n  if (!flexBasis.isAuto() && !flexBasis.isUndefined()) {\n    return flexBasis;\n  }\n  if (style_.flex().isDefined() && style_.flex().unwrap() > 0.0f) {\n    return config_->useWebDefaults() ? StyleSizeLength::ofAuto()\n                                     : StyleSizeLength::points(0);\n  }\n  return StyleSizeLength::ofAuto();\n}\n\nFloatOptional Node::resolveFlexBasis(\n    Direction direction,\n    FlexDirection flexDirection,\n    float referenceLength,\n    float ownerWidth) const {\n  FloatOptional value = processFlexBasis().resolve(referenceLength);\n  if (style_.boxSizing() == BoxSizing::BorderBox) {\n    return value;\n  }\n\n  Dimension dim = dimension(flexDirection);\n  FloatOptional dimensionPaddingAndBorder = FloatOptional{\n      style_.computePaddingAndBorderForDimension(direction, dim, ownerWidth)};\n\n  return value +\n      (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder\n                                             : FloatOptional{0.0});\n}\n\nvoid Node::processDimensions() {\n  for (auto dim : {Dimension::Width, Dimension::Height}) {\n    if (style_.maxDimension(dim).isDefined() &&\n        yoga::inexactEquals(\n            style_.maxDimension(dim), style_.minDimension(dim))) {\n      processedDimensions_[yoga::to_underlying(dim)] = style_.maxDimension(dim);\n    } else {\n      processedDimensions_[yoga::to_underlying(dim)] = style_.dimension(dim);\n    }\n  }\n}\n\nDirection Node::resolveDirection(const Direction ownerDirection) {\n  if (style_.direction() == Direction::Inherit) {\n    return ownerDirection != Direction::Inherit ? ownerDirection\n                                                : Direction::LTR;\n  } else {\n    return style_.direction();\n  }\n}\n\nvoid Node::clearChildren() {\n  children_.clear();\n  children_.shrink_to_fit();\n}\n\n// Other Methods\n\nvoid Node::cloneChildrenIfNeeded() {\n  size_t i = 0;\n  for (Node*& child : children_) {\n    if (child->getOwner() != this) {\n      child = resolveRef(config_->cloneNode(child, this, i));\n      child->setOwner(this);\n\n      if (child->hasContentsChildren()) [[unlikely]] {\n        child->cloneContentsChildrenIfNeeded();\n      }\n    }\n    i += 1;\n  }\n}\n\nvoid Node::cloneContentsChildrenIfNeeded() {\n  size_t i = 0;\n  for (Node*& child : children_) {\n    if (child->style().display() == Display::Contents &&\n        child->getOwner() != this) {\n      child = resolveRef(config_->cloneNode(child, this, i));\n      child->setOwner(this);\n      child->cloneChildrenIfNeeded();\n    }\n    i += 1;\n  }\n}\n\nvoid Node::markDirtyAndPropagate() {\n  if (!isDirty_) {\n    setDirty(true);\n    setLayoutComputedFlexBasis(FloatOptional());\n    if (owner_ != nullptr) {\n      owner_->markDirtyAndPropagate();\n    }\n  }\n}\n\nfloat Node::resolveFlexGrow() const {\n  // Root nodes flexGrow should always be 0\n  if (owner_ == nullptr) {\n    return 0.0;\n  }\n  if (style_.flexGrow().isDefined()) {\n    return style_.flexGrow().unwrap();\n  }\n  if (style_.flex().isDefined() && style_.flex().unwrap() > 0.0f) {\n    return style_.flex().unwrap();\n  }\n  return Style::DefaultFlexGrow;\n}\n\nfloat Node::resolveFlexShrink() const {\n  if (owner_ == nullptr) {\n    return 0.0;\n  }\n  if (style_.flexShrink().isDefined()) {\n    return style_.flexShrink().unwrap();\n  }\n  if (!config_->useWebDefaults() && style_.flex().isDefined() &&\n      style_.flex().unwrap() < 0.0f) {\n    return -style_.flex().unwrap();\n  }\n  return config_->useWebDefaults() ? Style::WebDefaultFlexShrink\n                                   : Style::DefaultFlexShrink;\n}\n\nbool Node::isNodeFlexible() {\n  return (\n      (style_.positionType() != PositionType::Absolute) &&\n      (resolveFlexGrow() != 0 || resolveFlexShrink() != 0));\n}\n\nvoid Node::reset() {\n  yoga::assertFatalWithNode(\n      this,\n      children_.empty(),\n      \"Cannot reset a node which still has children attached\");\n  yoga::assertFatalWithNode(\n      this, owner_ == nullptr, \"Cannot reset a node still attached to a owner\");\n\n  *this = Node{getConfig()};\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/node/Node.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdint>\n#include <cstdio>\n#include <vector>\n\n#include <yoga/Yoga.h>\n#include <yoga/node/LayoutableChildren.h>\n\n#include <yoga/config/Config.h>\n#include <yoga/enums/Dimension.h>\n#include <yoga/enums/Direction.h>\n#include <yoga/enums/Edge.h>\n#include <yoga/enums/Errata.h>\n#include <yoga/enums/MeasureMode.h>\n#include <yoga/enums/NodeType.h>\n#include <yoga/enums/PhysicalEdge.h>\n#include <yoga/node/LayoutResults.h>\n#include <yoga/style/Style.h>\n\n// Tag struct used to form the opaque YGNodeRef for the public C API\nstruct YGNode {};\n\nnamespace facebook::yoga {\n\nclass YG_EXPORT Node : public ::YGNode {\n public:\n  using LayoutableChildren = yoga::LayoutableChildren<Node>;\n  Node();\n  explicit Node(const Config* config);\n\n  Node(Node&& node) noexcept;\n\n  // Does not expose true value semantics, as children are not cloned eagerly.\n  // Should we remove this?\n  Node(const Node& node) = default;\n\n  // assignment means potential leaks of existing children, or alternatively\n  // freeing unowned memory, double free, or freeing stack memory.\n  Node& operator=(const Node&) = delete;\n\n  // Getters\n  void* getContext() const {\n    return context_;\n  }\n\n  bool alwaysFormsContainingBlock() const {\n    return alwaysFormsContainingBlock_;\n  }\n\n  bool getHasNewLayout() const {\n    return hasNewLayout_;\n  }\n\n  NodeType getNodeType() const {\n    return nodeType_;\n  }\n\n  bool hasMeasureFunc() const noexcept {\n    return measureFunc_ != nullptr;\n  }\n\n  YGSize measure(\n      float availableWidth,\n      MeasureMode widthMode,\n      float availableHeight,\n      MeasureMode heightMode);\n\n  bool hasBaselineFunc() const noexcept {\n    return baselineFunc_ != nullptr;\n  }\n\n  float baseline(float width, float height) const;\n\n  float dimensionWithMargin(FlexDirection axis, float widthSize);\n\n  bool isLayoutDimensionDefined(FlexDirection axis);\n\n  /**\n   * Whether the node has a \"definite length\" along the given axis.\n   * https://www.w3.org/TR/css-sizing-3/#definite\n   */\n  inline bool hasDefiniteLength(Dimension dimension, float ownerSize) {\n    auto usedValue = getProcessedDimension(dimension).resolve(ownerSize);\n    return usedValue.isDefined() && usedValue.unwrap() >= 0.0f;\n  }\n\n  bool hasErrata(Errata errata) const {\n    return config_->hasErrata(errata);\n  }\n\n  bool hasContentsChildren() const {\n    return contentsChildrenCount_ != 0;\n  }\n\n  YGDirtiedFunc getDirtiedFunc() const {\n    return dirtiedFunc_;\n  }\n\n  // For Performance reasons passing as reference.\n  Style& style() {\n    return style_;\n  }\n\n  const Style& style() const {\n    return style_;\n  }\n\n  // For Performance reasons passing as reference.\n  LayoutResults& getLayout() {\n    return layout_;\n  }\n\n  const LayoutResults& getLayout() const {\n    return layout_;\n  }\n\n  size_t getLineIndex() const {\n    return lineIndex_;\n  }\n\n  bool isReferenceBaseline() const {\n    return isReferenceBaseline_;\n  }\n\n  // returns the Node that owns this Node. An owner is used to identify\n  // the YogaTree that a Node belongs to. This method will return the parent\n  // of the Node when a Node only belongs to one YogaTree or nullptr when\n  // the Node is shared between two or more YogaTrees.\n  Node* getOwner() const {\n    return owner_;\n  }\n\n  const std::vector<Node*>& getChildren() const {\n    return children_;\n  }\n\n  Node* getChild(size_t index) const {\n    return children_.at(index);\n  }\n\n  size_t getChildCount() const {\n    return children_.size();\n  }\n\n  LayoutableChildren getLayoutChildren() const {\n    return LayoutableChildren(this);\n  }\n\n  size_t getLayoutChildCount() const {\n    if (contentsChildrenCount_ == 0) {\n      return children_.size();\n    } else {\n      size_t count = 0;\n      for (auto iter = getLayoutChildren().begin();\n           iter != getLayoutChildren().end();\n           iter++) {\n        count++;\n      }\n      return count;\n    }\n  }\n\n  const Config* getConfig() const {\n    return config_;\n  }\n\n  bool isDirty() const {\n    return isDirty_;\n  }\n\n  Style::SizeLength getProcessedDimension(Dimension dimension) const {\n    return processedDimensions_[static_cast<size_t>(dimension)];\n  }\n\n  FloatOptional getResolvedDimension(\n      Direction direction,\n      Dimension dimension,\n      float referenceLength,\n      float ownerWidth) const {\n    FloatOptional value =\n        getProcessedDimension(dimension).resolve(referenceLength);\n    if (style_.boxSizing() == BoxSizing::BorderBox) {\n      return value;\n    }\n\n    FloatOptional dimensionPaddingAndBorder =\n        FloatOptional{style_.computePaddingAndBorderForDimension(\n            direction, dimension, ownerWidth)};\n\n    return value +\n        (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder\n                                               : FloatOptional{0.0});\n  }\n\n  // Setters\n\n  void setContext(void* context) {\n    context_ = context;\n  }\n\n  void setAlwaysFormsContainingBlock(bool alwaysFormsContainingBlock) {\n    alwaysFormsContainingBlock_ = alwaysFormsContainingBlock;\n  }\n\n  void setHasNewLayout(bool hasNewLayout) {\n    hasNewLayout_ = hasNewLayout;\n  }\n\n  void setNodeType(NodeType nodeType) {\n    nodeType_ = nodeType;\n  }\n\n  void setMeasureFunc(YGMeasureFunc measureFunc);\n\n  void setBaselineFunc(YGBaselineFunc baseLineFunc) {\n    baselineFunc_ = baseLineFunc;\n  }\n\n  void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) {\n    dirtiedFunc_ = dirtiedFunc;\n  }\n\n  void setStyle(const Style& style) {\n    style_ = style;\n  }\n\n  void setLayout(const LayoutResults& layout) {\n    layout_ = layout;\n  }\n\n  void setLineIndex(size_t lineIndex) {\n    lineIndex_ = lineIndex;\n  }\n\n  void setIsReferenceBaseline(bool isReferenceBaseline) {\n    isReferenceBaseline_ = isReferenceBaseline;\n  }\n\n  void setOwner(Node* owner) {\n    owner_ = owner;\n  }\n\n  // TODO: rvalue override for setChildren\n\n  void setConfig(Config* config);\n\n  void setDirty(bool isDirty);\n  void setChildren(const std::vector<Node*>& children);\n  void setLayoutLastOwnerDirection(Direction direction);\n  void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis);\n  void setLayoutComputedFlexBasisGeneration(\n      uint32_t computedFlexBasisGeneration);\n  void setLayoutMeasuredDimension(float measuredDimension, Dimension dimension);\n  void setLayoutHadOverflow(bool hadOverflow);\n  void setLayoutDimension(float lengthValue, Dimension dimension);\n  void setLayoutDirection(Direction direction);\n  void setLayoutMargin(float margin, PhysicalEdge edge);\n  void setLayoutBorder(float border, PhysicalEdge edge);\n  void setLayoutPadding(float padding, PhysicalEdge edge);\n  void setLayoutPosition(float position, PhysicalEdge edge);\n  void setPosition(Direction direction, float ownerWidth, float ownerHeight);\n\n  // Other methods\n  Style::SizeLength processFlexBasis() const;\n  FloatOptional resolveFlexBasis(\n      Direction direction,\n      FlexDirection flexDirection,\n      float referenceLength,\n      float ownerWidth) const;\n  void processDimensions();\n  Direction resolveDirection(Direction ownerDirection);\n  void clearChildren();\n  /// Replaces the occurrences of oldChild with newChild\n  void replaceChild(Node* oldChild, Node* newChild);\n  void replaceChild(Node* child, size_t index);\n  void insertChild(Node* child, size_t index);\n  /// Removes the first occurrence of child\n  bool removeChild(Node* child);\n  void removeChild(size_t index);\n\n  void cloneChildrenIfNeeded();\n  void cloneContentsChildrenIfNeeded();\n  void markDirtyAndPropagate();\n  float resolveFlexGrow() const;\n  float resolveFlexShrink() const;\n  bool isNodeFlexible();\n  void reset();\n\n  float relativePosition(\n      FlexDirection axis,\n      Direction direction,\n      float axisSize) const;\n\n private:\n  // Used to allow resetting the node\n  Node& operator=(Node&&) noexcept = default;\n\n  void useWebDefaults() {\n    style_.setFlexDirection(FlexDirection::Row);\n    style_.setAlignContent(Align::Stretch);\n  }\n\n  bool hasNewLayout_ : 1 = true;\n  bool isReferenceBaseline_ : 1 = false;\n  bool isDirty_ : 1 = true;\n  bool alwaysFormsContainingBlock_ : 1 = false;\n  NodeType nodeType_ : bitCount<NodeType>() = NodeType::Default;\n  void* context_ = nullptr;\n  YGMeasureFunc measureFunc_ = nullptr;\n  YGBaselineFunc baselineFunc_ = nullptr;\n  YGDirtiedFunc dirtiedFunc_ = nullptr;\n  Style style_;\n  LayoutResults layout_;\n  size_t lineIndex_ = 0;\n  size_t contentsChildrenCount_ = 0;\n  Node* owner_ = nullptr;\n  std::vector<Node*> children_;\n  const Config* config_;\n  std::array<Style::SizeLength, 2> processedDimensions_{\n      {StyleSizeLength::undefined(), StyleSizeLength::undefined()}};\n};\n\ninline Node* resolveRef(const YGNodeRef ref) {\n  return static_cast<Node*>(ref);\n}\n\ninline const Node* resolveRef(const YGNodeConstRef ref) {\n  return static_cast<const Node*>(ref);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/numeric/Comparison.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <algorithm>\n#include <array>\n#include <cmath>\n#include <concepts>\n\n#include <yoga/Yoga.h>\n\nnamespace facebook::yoga {\n\nconstexpr bool isUndefined(std::floating_point auto value) {\n  return value != value;\n}\n\nconstexpr bool isDefined(std::floating_point auto value) {\n  return !isUndefined(value);\n}\n\n/**\n * Constexpr version of `std::isinf` before C++ 23\n */\nconstexpr bool isinf(auto value) {\n  return value == +std::numeric_limits<decltype(value)>::infinity() ||\n      value == -std::numeric_limits<decltype(value)>::infinity();\n}\n\nconstexpr auto maxOrDefined(\n    std::floating_point auto a,\n    std::floating_point auto b) {\n  if (yoga::isDefined(a) && yoga::isDefined(b)) {\n    return std::max(a, b);\n  }\n  return yoga::isUndefined(a) ? b : a;\n}\n\nconstexpr auto minOrDefined(\n    std::floating_point auto a,\n    std::floating_point auto b) {\n  if (yoga::isDefined(a) && yoga::isDefined(b)) {\n    return std::min(a, b);\n  }\n\n  return yoga::isUndefined(a) ? b : a;\n}\n\n// Custom equality functions using a hardcoded epsilon of 0.0001f, or returning\n// true if both floats are NaN.\ninline bool inexactEquals(float a, float b) {\n  if (yoga::isDefined(a) && yoga::isDefined(b)) {\n    return std::abs(a - b) < 0.0001f;\n  }\n  return yoga::isUndefined(a) && yoga::isUndefined(b);\n}\n\ninline bool inexactEquals(double a, double b) {\n  if (yoga::isDefined(a) && yoga::isDefined(b)) {\n    return std::abs(a - b) < 0.0001;\n  }\n  return yoga::isUndefined(a) && yoga::isUndefined(b);\n}\n\ntemplate <std::size_t Size, typename ElementT>\nbool inexactEquals(\n    const std::array<ElementT, Size>& val1,\n    const std::array<ElementT, Size>& val2) {\n  bool areEqual = true;\n  for (std::size_t i = 0; i < Size && areEqual; ++i) {\n    areEqual = inexactEquals(val1[i], val2[i]);\n  }\n  return areEqual;\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/numeric/FloatOptional.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/numeric/Comparison.h>\n#include <limits>\n\nnamespace facebook::yoga {\n\nstruct FloatOptional {\n private:\n  float value_ = std::numeric_limits<float>::quiet_NaN();\n\n public:\n  explicit constexpr FloatOptional(float value) : value_(value) {}\n  constexpr FloatOptional() = default;\n\n  // returns the wrapped value, or a value x with YGIsUndefined(x) == true\n  constexpr float unwrap() const {\n    return value_;\n  }\n\n  constexpr float unwrapOrDefault(float defaultValue) const {\n    return isUndefined() ? defaultValue : value_;\n  }\n\n  constexpr bool isUndefined() const {\n    return yoga::isUndefined(value_);\n  }\n\n  constexpr bool isDefined() const {\n    return yoga::isDefined(value_);\n  }\n};\n\n// operators take FloatOptional by value, as it is a 32bit value\n\nconstexpr bool operator==(FloatOptional lhs, FloatOptional rhs) {\n  return lhs.unwrap() == rhs.unwrap() ||\n      (lhs.isUndefined() && rhs.isUndefined());\n}\n\nconstexpr bool operator==(FloatOptional lhs, float rhs) {\n  return lhs == FloatOptional{rhs};\n}\n\nconstexpr bool operator==(float lhs, FloatOptional rhs) {\n  return rhs == lhs;\n}\n\nconstexpr FloatOptional operator+(FloatOptional lhs, FloatOptional rhs) {\n  return FloatOptional{lhs.unwrap() + rhs.unwrap()};\n}\n\nconstexpr bool operator>(FloatOptional lhs, FloatOptional rhs) {\n  return lhs.unwrap() > rhs.unwrap();\n}\n\nconstexpr bool operator<(FloatOptional lhs, FloatOptional rhs) {\n  return lhs.unwrap() < rhs.unwrap();\n}\n\nconstexpr bool operator>=(FloatOptional lhs, FloatOptional rhs) {\n  return lhs > rhs || lhs == rhs;\n}\n\nconstexpr bool operator<=(FloatOptional lhs, FloatOptional rhs) {\n  return lhs < rhs || lhs == rhs;\n}\n\nconstexpr FloatOptional maxOrDefined(FloatOptional lhs, FloatOptional rhs) {\n  return FloatOptional{yoga::maxOrDefined(lhs.unwrap(), rhs.unwrap())};\n}\n\ninline bool inexactEquals(FloatOptional lhs, FloatOptional rhs) {\n  return yoga::inexactEquals(lhs.unwrap(), rhs.unwrap());\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/GridLine.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdint>\n\nnamespace facebook::yoga {\n\n// https://www.w3.org/TR/css-grid-1/#typedef-grid-row-start-grid-line\nenum class GridLineType : uint8_t {\n  Auto,\n  Integer,\n  Span,\n};\n\nstruct GridLine {\n  GridLineType type{};\n  // Line position (1, 2, -1, -2, etc)\n  int32_t integer{};\n\n  constexpr static GridLine auto_() {\n    return GridLine{.type = GridLineType::Auto, .integer = 0};\n  }\n\n  constexpr static GridLine fromInteger(int32_t value) {\n    return GridLine{.type = GridLineType::Integer, .integer = value};\n  }\n\n  constexpr static GridLine span(int32_t value) {\n    return GridLine{.type = GridLineType::Span, .integer = value};\n  }\n\n  constexpr bool isAuto() const {\n    return type == GridLineType::Auto;\n  }\n\n  constexpr bool isInteger() const {\n    return type == GridLineType::Integer;\n  }\n\n  constexpr bool isSpan() const {\n    return type == GridLineType::Span;\n  }\n\n  bool operator==(const GridLine& other) const = default;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/GridTrack.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/style/StyleSizeLength.h>\n#include <vector>\n\nnamespace facebook::yoga {\n// https://www.w3.org/TR/css-grid-1/#typedef-track-size\nstruct GridTrackSize {\n  StyleSizeLength minSizingFunction;\n  StyleSizeLength maxSizingFunction;\n\n  // These are used in the grid layout algorithm when distributing spaces among\n  // tracks\n  // TODO: maybe move them to TrackSizing since these are track states\n  float baseSize = 0.0f;\n  float growthLimit = 0.0f;\n  bool infinitelyGrowable = false;\n\n  // Static factory methods for common cases\n  constexpr static GridTrackSize auto_() {\n    return GridTrackSize{\n        .minSizingFunction = StyleSizeLength::ofAuto(),\n        .maxSizingFunction = StyleSizeLength::ofAuto()};\n  }\n\n  constexpr static GridTrackSize length(float points) {\n    auto len = StyleSizeLength::points(points);\n    return GridTrackSize{.minSizingFunction = len, .maxSizingFunction = len};\n  }\n\n  constexpr static GridTrackSize fr(float fraction) {\n    // Flex sizing function is always a max sizing function\n    return GridTrackSize{\n        .minSizingFunction = StyleSizeLength::ofAuto(),\n        .maxSizingFunction = StyleSizeLength::stretch(fraction)};\n  }\n\n  constexpr static GridTrackSize percent(float percentage) {\n    return GridTrackSize{\n        .minSizingFunction = StyleSizeLength::percent(percentage),\n        .maxSizingFunction = StyleSizeLength::percent(percentage)};\n  }\n\n  constexpr static GridTrackSize minmax(\n      StyleSizeLength min,\n      StyleSizeLength max) {\n    return GridTrackSize{.minSizingFunction = min, .maxSizingFunction = max};\n  }\n\n  bool operator==(const GridTrackSize& other) const = default;\n};\n\n// Grid track list for grid-template-rows/columns properties\nusing GridTrackList = std::vector<GridTrackSize>;\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/SmallValueBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <array>\n#include <bitset>\n#include <cassert>\n#include <cstdint>\n#include <memory>\n#include <vector>\n\nnamespace facebook::yoga {\n\n// Container which allows storing 32 or 64 bit integer values, whose index may\n// never change. Values are first stored in a fixed buffer of `BufferSize`\n// 32-bit chunks, before falling back to heap allocation.\ntemplate <size_t BufferSize>\nclass SmallValueBuffer {\n public:\n  SmallValueBuffer() = default;\n  SmallValueBuffer(const SmallValueBuffer& other) {\n    *this = other;\n  }\n  SmallValueBuffer(SmallValueBuffer&& other) noexcept = default;\n\n  // Add a new element to the buffer, returning the index of the element\n  uint16_t push(uint32_t value) {\n    const auto index = count_++;\n    assert(index < 4096 && \"SmallValueBuffer can only hold up to 4096 chunks\");\n    if (index < buffer_.size()) {\n      buffer_[index] = value;\n      return index;\n    }\n\n    if (overflow_ == nullptr) {\n      overflow_ = std::make_unique<SmallValueBuffer::Overflow>();\n    }\n\n    overflow_->buffer_.push_back(value);\n    overflow_->wideElements_.push_back(false);\n    return index;\n  }\n\n  uint16_t push(uint64_t value) {\n    const auto lsb = static_cast<uint32_t>(value & 0xFFFFFFFF);\n    const auto msb = static_cast<uint32_t>(value >> 32);\n\n    const auto lsbIndex = push(lsb);\n    [[maybe_unused]] const auto msbIndex = push(msb);\n    assert(\n        msbIndex < 4096 && \"SmallValueBuffer can only hold up to 4096 chunks\");\n\n    if (lsbIndex < buffer_.size()) {\n      wideElements_[lsbIndex] = true;\n    } else {\n      overflow_->wideElements_[lsbIndex - buffer_.size()] = true;\n    }\n    return lsbIndex;\n  }\n\n  // Replace an existing element in the buffer with a new value. A new index\n  // may be returned, e.g. if a new value is wider than the previous.\n  [[nodiscard]] uint16_t replace(uint16_t index, uint32_t value) {\n    if (index < buffer_.size()) {\n      buffer_[index] = value;\n    } else {\n      overflow_->buffer_.at(index - buffer_.size()) = value;\n    }\n\n    return index;\n  }\n\n  [[nodiscard]] uint16_t replace(uint16_t index, uint64_t value) {\n    const bool isWide = index < wideElements_.size()\n        ? wideElements_[index]\n        : overflow_->wideElements_.at(index - buffer_.size());\n\n    if (isWide) {\n      const auto lsb = static_cast<uint32_t>(value & 0xFFFFFFFF);\n      const auto msb = static_cast<uint32_t>(value >> 32);\n\n      [[maybe_unused]] auto lsbIndex = replace(index, lsb);\n      [[maybe_unused]] auto msbIndex = replace(index + 1, msb);\n      return index;\n    } else {\n      return push(value);\n    }\n  }\n\n  // Get a value of a given width\n  uint32_t get32(uint16_t index) const {\n    if (index < buffer_.size()) {\n      return buffer_[index];\n    } else {\n      return overflow_->buffer_.at(index - buffer_.size());\n    }\n  }\n\n  uint64_t get64(uint16_t index) const {\n    const auto lsb = get32(index);\n    const auto msb = get32(index + 1);\n    return (static_cast<uint64_t>(msb) << 32) | lsb;\n  }\n\n  SmallValueBuffer& operator=(const SmallValueBuffer& other) {\n    count_ = other.count_;\n    buffer_ = other.buffer_;\n    wideElements_ = other.wideElements_;\n    overflow_ = other.overflow_ ? std::make_unique<Overflow>(*other.overflow_)\n                                : nullptr;\n    return *this;\n  }\n\n  SmallValueBuffer& operator=(SmallValueBuffer&& other) noexcept = default;\n\n private:\n  struct Overflow {\n    std::vector<uint32_t> buffer_;\n    std::vector<bool> wideElements_;\n  };\n\n  uint16_t count_{0};\n  std::array<uint32_t, BufferSize> buffer_{};\n  std::bitset<BufferSize> wideElements_;\n  std::unique_ptr<Overflow> overflow_;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/Style.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <array>\n#include <cstdint>\n#include <type_traits>\n\n#include <yoga/Yoga.h>\n\n#include <yoga/algorithm/FlexDirection.h>\n#include <yoga/enums/Align.h>\n#include <yoga/enums/BoxSizing.h>\n#include <yoga/enums/Dimension.h>\n#include <yoga/enums/Direction.h>\n#include <yoga/enums/Display.h>\n#include <yoga/enums/Edge.h>\n#include <yoga/enums/FlexDirection.h>\n#include <yoga/enums/Gutter.h>\n#include <yoga/enums/Justify.h>\n#include <yoga/enums/Overflow.h>\n#include <yoga/enums/PhysicalEdge.h>\n#include <yoga/enums/PositionType.h>\n#include <yoga/enums/Unit.h>\n#include <yoga/enums/Wrap.h>\n#include <yoga/numeric/FloatOptional.h>\n#include <yoga/style/GridLine.h>\n#include <yoga/style/GridTrack.h>\n#include <yoga/style/StyleLength.h>\n#include <yoga/style/StyleSizeLength.h>\n#include <yoga/style/StyleValuePool.h>\n\nnamespace facebook::yoga {\n\nclass YG_EXPORT Style {\n public:\n  using Length = StyleLength;\n  using SizeLength = StyleSizeLength;\n\n  static constexpr float DefaultFlexGrow = 0.0f;\n  static constexpr float DefaultFlexShrink = 0.0f;\n  static constexpr float WebDefaultFlexShrink = 1.0f;\n\n  Direction direction() const {\n    return direction_;\n  }\n  void setDirection(Direction value) {\n    direction_ = value;\n  }\n\n  FlexDirection flexDirection() const {\n    return flexDirection_;\n  }\n  void setFlexDirection(FlexDirection value) {\n    flexDirection_ = value;\n  }\n\n  Justify justifyContent() const {\n    return justifyContent_;\n  }\n  void setJustifyContent(Justify value) {\n    justifyContent_ = value;\n  }\n\n  Justify justifyItems() const {\n    return justifyItems_;\n  }\n  void setJustifyItems(Justify value) {\n    justifyItems_ = value;\n  }\n\n  Justify justifySelf() const {\n    return justifySelf_;\n  }\n  void setJustifySelf(Justify value) {\n    justifySelf_ = value;\n  }\n\n  Align alignContent() const {\n    return alignContent_;\n  }\n  void setAlignContent(Align value) {\n    alignContent_ = value;\n  }\n\n  Align alignItems() const {\n    return alignItems_;\n  }\n  void setAlignItems(Align value) {\n    alignItems_ = value;\n  }\n\n  Align alignSelf() const {\n    return alignSelf_;\n  }\n  void setAlignSelf(Align value) {\n    alignSelf_ = value;\n  }\n\n  PositionType positionType() const {\n    return positionType_;\n  }\n  void setPositionType(PositionType value) {\n    positionType_ = value;\n  }\n\n  Wrap flexWrap() const {\n    return flexWrap_;\n  }\n  void setFlexWrap(Wrap value) {\n    flexWrap_ = value;\n  }\n\n  Overflow overflow() const {\n    return overflow_;\n  }\n  void setOverflow(Overflow value) {\n    overflow_ = value;\n  }\n\n  Display display() const {\n    return display_;\n  }\n  void setDisplay(Display value) {\n    display_ = value;\n  }\n\n  FloatOptional flex() const {\n    return pool_.getNumber(flex_);\n  }\n  void setFlex(FloatOptional value) {\n    pool_.store(flex_, value);\n  }\n\n  FloatOptional flexGrow() const {\n    return pool_.getNumber(flexGrow_);\n  }\n  void setFlexGrow(FloatOptional value) {\n    pool_.store(flexGrow_, value);\n  }\n\n  FloatOptional flexShrink() const {\n    return pool_.getNumber(flexShrink_);\n  }\n  void setFlexShrink(FloatOptional value) {\n    pool_.store(flexShrink_, value);\n  }\n\n  Style::SizeLength flexBasis() const {\n    return pool_.getSize(flexBasis_);\n  }\n  void setFlexBasis(Style::SizeLength value) {\n    pool_.store(flexBasis_, value);\n  }\n\n  Style::Length margin(Edge edge) const {\n    return pool_.getLength(margin_[yoga::to_underlying(edge)]);\n  }\n  void setMargin(Edge edge, Style::Length value) {\n    pool_.store(margin_[yoga::to_underlying(edge)], value);\n  }\n\n  Style::Length position(Edge edge) const {\n    return pool_.getLength(position_[yoga::to_underlying(edge)]);\n  }\n  void setPosition(Edge edge, Style::Length value) {\n    pool_.store(position_[yoga::to_underlying(edge)], value);\n  }\n\n  Style::Length padding(Edge edge) const {\n    return pool_.getLength(padding_[yoga::to_underlying(edge)]);\n  }\n  void setPadding(Edge edge, Style::Length value) {\n    pool_.store(padding_[yoga::to_underlying(edge)], value);\n  }\n\n  Style::Length border(Edge edge) const {\n    return pool_.getLength(border_[yoga::to_underlying(edge)]);\n  }\n  void setBorder(Edge edge, Style::Length value) {\n    pool_.store(border_[yoga::to_underlying(edge)], value);\n  }\n\n  Style::Length gap(Gutter gutter) const {\n    return pool_.getLength(gap_[yoga::to_underlying(gutter)]);\n  }\n  void setGap(Gutter gutter, Style::Length value) {\n    pool_.store(gap_[yoga::to_underlying(gutter)], value);\n  }\n\n  Style::SizeLength dimension(Dimension axis) const {\n    return pool_.getSize(dimensions_[yoga::to_underlying(axis)]);\n  }\n  void setDimension(Dimension axis, Style::SizeLength value) {\n    pool_.store(dimensions_[yoga::to_underlying(axis)], value);\n  }\n\n  Style::SizeLength minDimension(Dimension axis) const {\n    return pool_.getSize(minDimensions_[yoga::to_underlying(axis)]);\n  }\n  void setMinDimension(Dimension axis, Style::SizeLength value) {\n    pool_.store(minDimensions_[yoga::to_underlying(axis)], value);\n  }\n\n  // Grid Container Properties\n  const GridTrackList& gridTemplateColumns() const {\n    return gridTemplateColumns_;\n  }\n  void setGridTemplateColumns(GridTrackList value) {\n    gridTemplateColumns_ = std::move(value);\n  }\n  void resizeGridTemplateColumns(size_t count) {\n    gridTemplateColumns_.resize(count);\n  }\n  void setGridTemplateColumnAt(size_t index, GridTrackSize value) {\n    gridTemplateColumns_[index] = value;\n  }\n\n  const GridTrackList& gridTemplateRows() const {\n    return gridTemplateRows_;\n  }\n  void setGridTemplateRows(GridTrackList value) {\n    gridTemplateRows_ = std::move(value);\n  }\n  void resizeGridTemplateRows(size_t count) {\n    gridTemplateRows_.resize(count);\n  }\n  void setGridTemplateRowAt(size_t index, GridTrackSize value) {\n    gridTemplateRows_[index] = value;\n  }\n\n  const GridTrackList& gridAutoColumns() const {\n    return gridAutoColumns_;\n  }\n  void setGridAutoColumns(GridTrackList value) {\n    gridAutoColumns_ = std::move(value);\n  }\n  void resizeGridAutoColumns(size_t count) {\n    gridAutoColumns_.resize(count);\n  }\n  void setGridAutoColumnAt(size_t index, GridTrackSize value) {\n    gridAutoColumns_[index] = value;\n  }\n\n  const GridTrackList& gridAutoRows() const {\n    return gridAutoRows_;\n  }\n  void setGridAutoRows(GridTrackList value) {\n    gridAutoRows_ = std::move(value);\n  }\n  void resizeGridAutoRows(size_t count) {\n    gridAutoRows_.resize(count);\n  }\n  void setGridAutoRowAt(size_t index, GridTrackSize value) {\n    gridAutoRows_[index] = value;\n  }\n\n  // Grid Item Properties\n  const GridLine& gridColumnStart() const {\n    return gridColumnStart_;\n  }\n  void setGridColumnStart(GridLine value) {\n    gridColumnStart_ = value;\n  }\n\n  const GridLine& gridColumnEnd() const {\n    return gridColumnEnd_;\n  }\n  void setGridColumnEnd(GridLine value) {\n    gridColumnEnd_ = value;\n  }\n\n  const GridLine& gridRowStart() const {\n    return gridRowStart_;\n  }\n  void setGridRowStart(GridLine value) {\n    gridRowStart_ = value;\n  }\n\n  const GridLine& gridRowEnd() const {\n    return gridRowEnd_;\n  }\n  void setGridRowEnd(GridLine value) {\n    gridRowEnd_ = value;\n  }\n\n  FloatOptional resolvedMinDimension(\n      Direction direction,\n      Dimension axis,\n      float referenceLength,\n      float ownerWidth) const {\n    FloatOptional value = minDimension(axis).resolve(referenceLength);\n    if (boxSizing() == BoxSizing::BorderBox) {\n      return value;\n    }\n\n    FloatOptional dimensionPaddingAndBorder = FloatOptional{\n        computePaddingAndBorderForDimension(direction, axis, ownerWidth)};\n\n    return value +\n        (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder\n                                               : FloatOptional{0.0});\n  }\n\n  Style::SizeLength maxDimension(Dimension axis) const {\n    return pool_.getSize(maxDimensions_[yoga::to_underlying(axis)]);\n  }\n  void setMaxDimension(Dimension axis, Style::SizeLength value) {\n    pool_.store(maxDimensions_[yoga::to_underlying(axis)], value);\n  }\n\n  FloatOptional resolvedMaxDimension(\n      Direction direction,\n      Dimension axis,\n      float referenceLength,\n      float ownerWidth) const {\n    FloatOptional value = maxDimension(axis).resolve(referenceLength);\n    if (boxSizing() == BoxSizing::BorderBox) {\n      return value;\n    }\n\n    FloatOptional dimensionPaddingAndBorder = FloatOptional{\n        computePaddingAndBorderForDimension(direction, axis, ownerWidth)};\n\n    return value +\n        (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder\n                                               : FloatOptional{0.0});\n  }\n\n  FloatOptional aspectRatio() const {\n    return pool_.getNumber(aspectRatio_);\n  }\n  void setAspectRatio(FloatOptional value) {\n    // degenerate aspect ratios act as auto.\n    // see https://drafts.csswg.org/css-sizing-4/#valdef-aspect-ratio-ratio\n    pool_.store(\n        aspectRatio_,\n        value == 0.0f || std::isinf(value.unwrap()) ? FloatOptional{} : value);\n  }\n\n  BoxSizing boxSizing() const {\n    return boxSizing_;\n  }\n  void setBoxSizing(BoxSizing value) {\n    boxSizing_ = value;\n  }\n\n  bool horizontalInsetsDefined() const {\n    return position_[yoga::to_underlying(Edge::Left)].isDefined() ||\n        position_[yoga::to_underlying(Edge::Right)].isDefined() ||\n        position_[yoga::to_underlying(Edge::All)].isDefined() ||\n        position_[yoga::to_underlying(Edge::Horizontal)].isDefined() ||\n        position_[yoga::to_underlying(Edge::Start)].isDefined() ||\n        position_[yoga::to_underlying(Edge::End)].isDefined();\n  }\n\n  bool verticalInsetsDefined() const {\n    return position_[yoga::to_underlying(Edge::Top)].isDefined() ||\n        position_[yoga::to_underlying(Edge::Bottom)].isDefined() ||\n        position_[yoga::to_underlying(Edge::All)].isDefined() ||\n        position_[yoga::to_underlying(Edge::Vertical)].isDefined();\n  }\n\n  bool isFlexStartPositionDefined(FlexDirection axis, Direction direction)\n      const {\n    return computePosition(flexStartEdge(axis), direction).isDefined();\n  }\n\n  bool isFlexStartPositionAuto(FlexDirection axis, Direction direction) const {\n    return computePosition(flexStartEdge(axis), direction).isAuto();\n  }\n\n  bool isInlineStartPositionDefined(FlexDirection axis, Direction direction)\n      const {\n    return computePosition(inlineStartEdge(axis, direction), direction)\n        .isDefined();\n  }\n\n  bool isInlineStartPositionAuto(FlexDirection axis, Direction direction)\n      const {\n    return computePosition(inlineStartEdge(axis, direction), direction)\n        .isAuto();\n  }\n\n  bool isFlexEndPositionDefined(FlexDirection axis, Direction direction) const {\n    return computePosition(flexEndEdge(axis), direction).isDefined();\n  }\n\n  bool isFlexEndPositionAuto(FlexDirection axis, Direction direction) const {\n    return computePosition(flexEndEdge(axis), direction).isAuto();\n  }\n\n  bool isInlineEndPositionDefined(FlexDirection axis, Direction direction)\n      const {\n    return computePosition(inlineEndEdge(axis, direction), direction)\n        .isDefined();\n  }\n\n  bool isInlineEndPositionAuto(FlexDirection axis, Direction direction) const {\n    return computePosition(inlineEndEdge(axis, direction), direction).isAuto();\n  }\n\n  float computeFlexStartPosition(\n      FlexDirection axis,\n      Direction direction,\n      float axisSize) const {\n    return computePosition(flexStartEdge(axis), direction)\n        .resolve(axisSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeInlineStartPosition(\n      FlexDirection axis,\n      Direction direction,\n      float axisSize) const {\n    return computePosition(inlineStartEdge(axis, direction), direction)\n        .resolve(axisSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeFlexEndPosition(\n      FlexDirection axis,\n      Direction direction,\n      float axisSize) const {\n    return computePosition(flexEndEdge(axis), direction)\n        .resolve(axisSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeInlineEndPosition(\n      FlexDirection axis,\n      Direction direction,\n      float axisSize) const {\n    return computePosition(inlineEndEdge(axis, direction), direction)\n        .resolve(axisSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeFlexStartMargin(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeMargin(flexStartEdge(axis), direction)\n        .resolve(widthSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeInlineStartMargin(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeMargin(inlineStartEdge(axis, direction), direction)\n        .resolve(widthSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeFlexEndMargin(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeMargin(flexEndEdge(axis), direction)\n        .resolve(widthSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeInlineEndMargin(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeMargin(inlineEndEdge(axis, direction), direction)\n        .resolve(widthSize)\n        .unwrapOrDefault(0.0f);\n  }\n\n  float computeFlexStartBorder(FlexDirection axis, Direction direction) const {\n    return maxOrDefined(\n        computeBorder(flexStartEdge(axis), direction).resolve(0.0f).unwrap(),\n        0.0f);\n  }\n\n  float computeInlineStartBorder(FlexDirection axis, Direction direction)\n      const {\n    return maxOrDefined(\n        computeBorder(inlineStartEdge(axis, direction), direction)\n            .resolve(0.0f)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeFlexEndBorder(FlexDirection axis, Direction direction) const {\n    return maxOrDefined(\n        computeBorder(flexEndEdge(axis), direction).resolve(0.0f).unwrap(),\n        0.0f);\n  }\n\n  float computeInlineEndBorder(FlexDirection axis, Direction direction) const {\n    return maxOrDefined(\n        computeBorder(inlineEndEdge(axis, direction), direction)\n            .resolve(0.0f)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeFlexStartPadding(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return maxOrDefined(\n        computePadding(flexStartEdge(axis), direction)\n            .resolve(widthSize)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeInlineStartPadding(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return maxOrDefined(\n        computePadding(inlineStartEdge(axis, direction), direction)\n            .resolve(widthSize)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeFlexEndPadding(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return maxOrDefined(\n        computePadding(flexEndEdge(axis), direction)\n            .resolve(widthSize)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeInlineEndPadding(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return maxOrDefined(\n        computePadding(inlineEndEdge(axis, direction), direction)\n            .resolve(widthSize)\n            .unwrap(),\n        0.0f);\n  }\n\n  float computeInlineStartPaddingAndBorder(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeInlineStartPadding(axis, direction, widthSize) +\n        computeInlineStartBorder(axis, direction);\n  }\n\n  float computeFlexStartPaddingAndBorder(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeFlexStartPadding(axis, direction, widthSize) +\n        computeFlexStartBorder(axis, direction);\n  }\n\n  float computeInlineEndPaddingAndBorder(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeInlineEndPadding(axis, direction, widthSize) +\n        computeInlineEndBorder(axis, direction);\n  }\n\n  float computeFlexEndPaddingAndBorder(\n      FlexDirection axis,\n      Direction direction,\n      float widthSize) const {\n    return computeFlexEndPadding(axis, direction, widthSize) +\n        computeFlexEndBorder(axis, direction);\n  }\n\n  float computePaddingAndBorderForDimension(\n      Direction direction,\n      Dimension dimension,\n      float widthSize) const {\n    FlexDirection flexDirectionForDimension = dimension == Dimension::Width\n        ? FlexDirection::Row\n        : FlexDirection::Column;\n\n    return computeFlexStartPaddingAndBorder(\n               flexDirectionForDimension, direction, widthSize) +\n        computeFlexEndPaddingAndBorder(\n               flexDirectionForDimension, direction, widthSize);\n  }\n\n  float computeBorderForAxis(FlexDirection axis) const {\n    return computeInlineStartBorder(axis, Direction::LTR) +\n        computeInlineEndBorder(axis, Direction::LTR);\n  }\n\n  float computeMarginForAxis(FlexDirection axis, float widthSize) const {\n    // The total margin for a given axis does not depend on the direction\n    // so hardcoding LTR here to avoid piping direction to this function\n    return computeInlineStartMargin(axis, Direction::LTR, widthSize) +\n        computeInlineEndMargin(axis, Direction::LTR, widthSize);\n  }\n\n  float computeGapForAxis(FlexDirection axis, float ownerSize) const {\n    auto gap = isRow(axis) ? computeColumnGap() : computeRowGap();\n    return maxOrDefined(gap.resolve(ownerSize).unwrap(), 0.0f);\n  }\n\n  float computeGapForDimension(Dimension dimension, float ownerSize) const {\n    auto gap =\n        dimension == Dimension::Width ? computeColumnGap() : computeRowGap();\n    return maxOrDefined(gap.resolve(ownerSize).unwrap(), 0.0f);\n  }\n\n  bool flexStartMarginIsAuto(FlexDirection axis, Direction direction) const {\n    return computeMargin(flexStartEdge(axis), direction).isAuto();\n  }\n\n  bool flexEndMarginIsAuto(FlexDirection axis, Direction direction) const {\n    return computeMargin(flexEndEdge(axis), direction).isAuto();\n  }\n\n  bool inlineStartMarginIsAuto(FlexDirection axis, Direction direction) const {\n    return computeMargin(inlineStartEdge(axis, direction), direction).isAuto();\n  }\n\n  bool inlineEndMarginIsAuto(FlexDirection axis, Direction direction) const {\n    return computeMargin(inlineEndEdge(axis, direction), direction).isAuto();\n  }\n\n  bool operator==(const Style& other) const {\n    return direction_ == other.direction_ &&\n        flexDirection_ == other.flexDirection_ &&\n        justifyContent_ == other.justifyContent_ &&\n        justifyItems_ == other.justifyItems_ &&\n        justifySelf_ == other.justifySelf_ &&\n        alignContent_ == other.alignContent_ &&\n        alignItems_ == other.alignItems_ && alignSelf_ == other.alignSelf_ &&\n        positionType_ == other.positionType_ && flexWrap_ == other.flexWrap_ &&\n        overflow_ == other.overflow_ && display_ == other.display_ &&\n        numbersEqual(flex_, pool_, other.flex_, other.pool_) &&\n        numbersEqual(flexGrow_, pool_, other.flexGrow_, other.pool_) &&\n        numbersEqual(flexShrink_, pool_, other.flexShrink_, other.pool_) &&\n        lengthsEqual(flexBasis_, pool_, other.flexBasis_, other.pool_) &&\n        lengthsEqual(margin_, pool_, other.margin_, other.pool_) &&\n        lengthsEqual(position_, pool_, other.position_, other.pool_) &&\n        lengthsEqual(padding_, pool_, other.padding_, other.pool_) &&\n        lengthsEqual(border_, pool_, other.border_, other.pool_) &&\n        lengthsEqual(gap_, pool_, other.gap_, other.pool_) &&\n        lengthsEqual(dimensions_, pool_, other.dimensions_, other.pool_) &&\n        lengthsEqual(\n               minDimensions_, pool_, other.minDimensions_, other.pool_) &&\n        lengthsEqual(\n               maxDimensions_, pool_, other.maxDimensions_, other.pool_) &&\n        numbersEqual(aspectRatio_, pool_, other.aspectRatio_, other.pool_) &&\n        gridTemplateColumns_ == other.gridTemplateColumns_ &&\n        gridTemplateRows_ == other.gridTemplateRows_ &&\n        gridAutoColumns_ == other.gridAutoColumns_ &&\n        gridAutoRows_ == other.gridAutoRows_ &&\n        gridColumnStart_ == other.gridColumnStart_ &&\n        gridColumnEnd_ == other.gridColumnEnd_ &&\n        gridRowStart_ == other.gridRowStart_ &&\n        gridRowEnd_ == other.gridRowEnd_;\n  }\n\n private:\n  using Dimensions = std::array<StyleValueHandle, ordinalCount<Dimension>()>;\n  using Edges = std::array<StyleValueHandle, ordinalCount<Edge>()>;\n  using Gutters = std::array<StyleValueHandle, ordinalCount<Gutter>()>;\n\n  static inline bool numbersEqual(\n      const StyleValueHandle& lhsHandle,\n      const StyleValuePool& lhsPool,\n      const StyleValueHandle& rhsHandle,\n      const StyleValuePool& rhsPool) {\n    return (lhsHandle.isUndefined() && rhsHandle.isUndefined()) ||\n        (lhsPool.getNumber(lhsHandle) == rhsPool.getNumber(rhsHandle));\n  }\n\n  static inline bool lengthsEqual(\n      const StyleValueHandle& lhsHandle,\n      const StyleValuePool& lhsPool,\n      const StyleValueHandle& rhsHandle,\n      const StyleValuePool& rhsPool) {\n    return (lhsHandle.isUndefined() && rhsHandle.isUndefined()) ||\n        (lhsPool.getLength(lhsHandle) == rhsPool.getLength(rhsHandle));\n  }\n\n  template <size_t N>\n  static inline bool lengthsEqual(\n      const std::array<StyleValueHandle, N>& lhs,\n      const StyleValuePool& lhsPool,\n      const std::array<StyleValueHandle, N>& rhs,\n      const StyleValuePool& rhsPool) {\n    return std::equal(\n        lhs.begin(),\n        lhs.end(),\n        rhs.begin(),\n        rhs.end(),\n        [&](const auto& lhs, const auto& rhs) {\n          return lengthsEqual(lhs, lhsPool, rhs, rhsPool);\n        });\n  }\n\n  Style::Length computeColumnGap() const {\n    if (gap_[yoga::to_underlying(Gutter::Column)].isDefined()) {\n      return pool_.getLength(gap_[yoga::to_underlying(Gutter::Column)]);\n    } else {\n      return pool_.getLength(gap_[yoga::to_underlying(Gutter::All)]);\n    }\n  }\n\n  Style::Length computeRowGap() const {\n    if (gap_[yoga::to_underlying(Gutter::Row)].isDefined()) {\n      return pool_.getLength(gap_[yoga::to_underlying(Gutter::Row)]);\n    } else {\n      return pool_.getLength(gap_[yoga::to_underlying(Gutter::All)]);\n    }\n  }\n\n  Style::Length computeLeftEdge(const Edges& edges, Direction layoutDirection)\n      const {\n    if (layoutDirection == Direction::LTR &&\n        edges[yoga::to_underlying(Edge::Start)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Start)]);\n    } else if (\n        layoutDirection == Direction::RTL &&\n        edges[yoga::to_underlying(Edge::End)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::End)]);\n    } else if (edges[yoga::to_underlying(Edge::Left)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Left)]);\n    } else if (edges[yoga::to_underlying(Edge::Horizontal)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Horizontal)]);\n    } else {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::All)]);\n    }\n  }\n\n  Style::Length computeTopEdge(const Edges& edges) const {\n    if (edges[yoga::to_underlying(Edge::Top)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Top)]);\n    } else if (edges[yoga::to_underlying(Edge::Vertical)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Vertical)]);\n    } else {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::All)]);\n    }\n  }\n\n  Style::Length computeRightEdge(const Edges& edges, Direction layoutDirection)\n      const {\n    if (layoutDirection == Direction::LTR &&\n        edges[yoga::to_underlying(Edge::End)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::End)]);\n    } else if (\n        layoutDirection == Direction::RTL &&\n        edges[yoga::to_underlying(Edge::Start)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Start)]);\n    } else if (edges[yoga::to_underlying(Edge::Right)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Right)]);\n    } else if (edges[yoga::to_underlying(Edge::Horizontal)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Horizontal)]);\n    } else {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::All)]);\n    }\n  }\n\n  Style::Length computeBottomEdge(const Edges& edges) const {\n    if (edges[yoga::to_underlying(Edge::Bottom)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Bottom)]);\n    } else if (edges[yoga::to_underlying(Edge::Vertical)].isDefined()) {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::Vertical)]);\n    } else {\n      return pool_.getLength(edges[yoga::to_underlying(Edge::All)]);\n    }\n  }\n\n  Style::Length computePosition(PhysicalEdge edge, Direction direction) const {\n    switch (edge) {\n      case PhysicalEdge::Left:\n        return computeLeftEdge(position_, direction);\n      case PhysicalEdge::Top:\n        return computeTopEdge(position_);\n      case PhysicalEdge::Right:\n        return computeRightEdge(position_, direction);\n      case PhysicalEdge::Bottom:\n        return computeBottomEdge(position_);\n      default:\n        fatalWithMessage(\"Invalid physical edge\");\n    }\n  }\n\n  Style::Length computeMargin(PhysicalEdge edge, Direction direction) const {\n    switch (edge) {\n      case PhysicalEdge::Left:\n        return computeLeftEdge(margin_, direction);\n      case PhysicalEdge::Top:\n        return computeTopEdge(margin_);\n      case PhysicalEdge::Right:\n        return computeRightEdge(margin_, direction);\n      case PhysicalEdge::Bottom:\n        return computeBottomEdge(margin_);\n      default:\n        fatalWithMessage(\"Invalid physical edge\");\n    }\n  }\n\n  Style::Length computePadding(PhysicalEdge edge, Direction direction) const {\n    switch (edge) {\n      case PhysicalEdge::Left:\n        return computeLeftEdge(padding_, direction);\n      case PhysicalEdge::Top:\n        return computeTopEdge(padding_);\n      case PhysicalEdge::Right:\n        return computeRightEdge(padding_, direction);\n      case PhysicalEdge::Bottom:\n        return computeBottomEdge(padding_);\n      default:\n        fatalWithMessage(\"Invalid physical edge\");\n    }\n  }\n\n  Style::Length computeBorder(PhysicalEdge edge, Direction direction) const {\n    switch (edge) {\n      case PhysicalEdge::Left:\n        return computeLeftEdge(border_, direction);\n      case PhysicalEdge::Top:\n        return computeTopEdge(border_);\n      case PhysicalEdge::Right:\n        return computeRightEdge(border_, direction);\n      case PhysicalEdge::Bottom:\n        return computeBottomEdge(border_);\n      default:\n        fatalWithMessage(\"Invalid physical edge\");\n    }\n  }\n\n  Direction direction_ : bitCount<Direction>() = Direction::Inherit;\n  FlexDirection flexDirection_\n      : bitCount<FlexDirection>() = FlexDirection::Column;\n  Justify justifyContent_ : bitCount<Justify>() = Justify::FlexStart;\n  Justify justifyItems_ : bitCount<Justify>() = Justify::Stretch;\n  Justify justifySelf_ : bitCount<Justify>() = Justify::Auto;\n  Align alignContent_ : bitCount<Align>() = Align::FlexStart;\n  Align alignItems_ : bitCount<Align>() = Align::Stretch;\n  Align alignSelf_ : bitCount<Align>() = Align::Auto;\n  PositionType positionType_\n      : bitCount<PositionType>() = PositionType::Relative;\n  Wrap flexWrap_ : bitCount<Wrap>() = Wrap::NoWrap;\n  Overflow overflow_ : bitCount<Overflow>() = Overflow::Visible;\n  Display display_ : bitCount<Display>() = Display::Flex;\n  BoxSizing boxSizing_ : bitCount<BoxSizing>() = BoxSizing::BorderBox;\n\n  StyleValueHandle flex_{};\n  StyleValueHandle flexGrow_{};\n  StyleValueHandle flexShrink_{};\n  StyleValueHandle flexBasis_{StyleValueHandle::ofAuto()};\n  Edges margin_{};\n  Edges position_{};\n  Edges padding_{};\n  Edges border_{};\n  Gutters gap_{};\n  Dimensions dimensions_{\n      StyleValueHandle::ofAuto(),\n      StyleValueHandle::ofAuto()};\n  Dimensions minDimensions_{};\n  Dimensions maxDimensions_{};\n  StyleValueHandle aspectRatio_{};\n\n  // Grid properties\n  GridTrackList gridTemplateColumns_{};\n  GridTrackList gridTemplateRows_{};\n  GridTrackList gridAutoColumns_{};\n  GridTrackList gridAutoRows_{};\n  GridLine gridColumnStart_{};\n  GridLine gridColumnEnd_{};\n  GridLine gridRowStart_{};\n  GridLine gridRowEnd_{};\n\n  StyleValuePool pool_;\n};\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/StyleLength.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/enums/Unit.h>\n#include <yoga/numeric/FloatOptional.h>\n\nnamespace facebook::yoga {\n\n/**\n * Style::Length represents a CSS Value which may be one of:\n * 1. Undefined\n * 2. A keyword (e.g. auto)\n * 3. A CSS <length-percentage> value:\n *    a. <length> value (e.g. 10px)\n *    b. <percentage> value of a reference <length>\n *\n * References:\n * 1. https://www.w3.org/TR/css-values-4/#lengths\n * 2. https://www.w3.org/TR/css-values-4/#percentage-value\n * 3. https://www.w3.org/TR/css-values-4/#mixed-percentages\n */\nclass StyleLength {\n public:\n  constexpr StyleLength() = default;\n\n  constexpr static StyleLength points(float value) {\n    return yoga::isUndefined(value) || yoga::isinf(value)\n        ? undefined()\n        : StyleLength{FloatOptional{value}, Unit::Point};\n  }\n\n  constexpr static StyleLength percent(float value) {\n    return yoga::isUndefined(value) || yoga::isinf(value)\n        ? undefined()\n        : StyleLength{FloatOptional{value}, Unit::Percent};\n  }\n\n  constexpr static StyleLength ofAuto() {\n    return StyleLength{{}, Unit::Auto};\n  }\n\n  constexpr static StyleLength undefined() {\n    return StyleLength{{}, Unit::Undefined};\n  }\n\n  constexpr bool isAuto() const {\n    return unit_ == Unit::Auto;\n  }\n\n  constexpr bool isUndefined() const {\n    return unit_ == Unit::Undefined;\n  }\n\n  constexpr bool isPoints() const {\n    return unit_ == Unit::Point;\n  }\n\n  constexpr bool isPercent() const {\n    return unit_ == Unit::Percent;\n  }\n\n  constexpr bool isDefined() const {\n    return !isUndefined();\n  }\n\n  constexpr FloatOptional value() const {\n    return value_;\n  }\n\n  constexpr FloatOptional resolve(float referenceLength) {\n#ifdef __clang__\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wswitch-enum\"\n#endif\n    switch (unit_) {\n#ifdef __clang__\n#pragma clang diagnostic pop\n#endif\n      case Unit::Point:\n        return value_;\n      case Unit::Percent:\n        return FloatOptional{value_.unwrap() * referenceLength * 0.01f};\n      default:\n        return FloatOptional{};\n    }\n  }\n\n  explicit constexpr operator YGValue() const {\n    return YGValue{value_.unwrap(), unscopedEnum(unit_)};\n  }\n\n  constexpr bool operator==(const StyleLength& rhs) const {\n    return value_ == rhs.value_ && unit_ == rhs.unit_;\n  }\n\n  constexpr bool inexactEquals(const StyleLength& other) const {\n    return unit_ == other.unit_ &&\n        facebook::yoga::inexactEquals(value_, other.value_);\n  }\n\n private:\n  // We intentionally do not allow direct construction using value and unit, to\n  // avoid invalid, or redundant combinations.\n  constexpr StyleLength(FloatOptional value, Unit unit)\n      : value_(value), unit_(unit) {}\n\n  FloatOptional value_{};\n  Unit unit_{Unit::Undefined};\n};\n\ninline bool inexactEquals(const StyleLength& a, const StyleLength& b) {\n  return a.inexactEquals(b);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/StyleSizeLength.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <yoga/enums/Unit.h>\n#include <yoga/numeric/FloatOptional.h>\n\nnamespace facebook::yoga {\n\n/**\n * This class represents a CSS Value for sizes (e.g. width, height, min-width,\n * etc.). It may be one of:\n * 1. Undefined\n * 2. A keyword (e.g. auto, max-content, stretch, etc.)\n * 3. A CSS <length-percentage> value:\n *    a. <length> value (e.g. 10px)\n *    b. <percentage> value of a reference <length>\n *\n * References:\n * 1. https://www.w3.org/TR/css-values-4/#lengths\n * 2. https://www.w3.org/TR/css-values-4/#percentage-value\n * 3. https://www.w3.org/TR/css-values-4/#mixed-percentages\n */\nclass StyleSizeLength {\n public:\n  constexpr StyleSizeLength() = default;\n\n  constexpr static StyleSizeLength points(float value) {\n    return yoga::isUndefined(value) || yoga::isinf(value)\n        ? undefined()\n        : StyleSizeLength{FloatOptional{value}, Unit::Point};\n  }\n\n  constexpr static StyleSizeLength percent(float value) {\n    return yoga::isUndefined(value) || yoga::isinf(value)\n        ? undefined()\n        : StyleSizeLength{FloatOptional{value}, Unit::Percent};\n  }\n\n  constexpr static StyleSizeLength stretch(float fraction) {\n    return yoga::isUndefined(fraction) || yoga::isinf(fraction)\n        ? undefined()\n        : StyleSizeLength{FloatOptional{fraction}, Unit::Stretch};\n  }\n\n  constexpr static StyleSizeLength ofAuto() {\n    return StyleSizeLength{{}, Unit::Auto};\n  }\n\n  constexpr static StyleSizeLength ofMaxContent() {\n    return StyleSizeLength{{}, Unit::MaxContent};\n  }\n\n  constexpr static StyleSizeLength ofFitContent() {\n    return StyleSizeLength{{}, Unit::FitContent};\n  }\n\n  constexpr static StyleSizeLength ofStretch() {\n    return StyleSizeLength{{}, Unit::Stretch};\n  }\n\n  constexpr static StyleSizeLength undefined() {\n    return StyleSizeLength{{}, Unit::Undefined};\n  }\n\n  constexpr bool isAuto() const {\n    return unit_ == Unit::Auto;\n  }\n\n  constexpr bool isMaxContent() const {\n    return unit_ == Unit::MaxContent;\n  }\n\n  constexpr bool isFitContent() const {\n    return unit_ == Unit::FitContent;\n  }\n\n  constexpr bool isStretch() const {\n    return unit_ == Unit::Stretch;\n  }\n\n  constexpr bool isUndefined() const {\n    return unit_ == Unit::Undefined;\n  }\n\n  constexpr bool isDefined() const {\n    return !isUndefined();\n  }\n\n  constexpr bool isPoints() const {\n    return unit_ == Unit::Point;\n  }\n\n  constexpr bool isPercent() const {\n    return unit_ == Unit::Percent;\n  }\n\n  constexpr FloatOptional value() const {\n    return value_;\n  }\n\n  constexpr FloatOptional resolve(float referenceLength) const {\n#ifdef __clang__\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wswitch-enum\"\n#endif\n    switch (unit_) {\n#ifdef __clang__\n#pragma clang diagnostic pop\n#endif\n      case Unit::Point:\n        return value_;\n      case Unit::Percent:\n        return FloatOptional{value_.unwrap() * referenceLength * 0.01f};\n      default:\n        return FloatOptional{};\n    }\n  }\n\n  explicit constexpr operator YGValue() const {\n    return YGValue{value_.unwrap(), unscopedEnum(unit_)};\n  }\n\n  constexpr bool operator==(const StyleSizeLength& rhs) const {\n    return value_ == rhs.value_ && unit_ == rhs.unit_;\n  }\n\n  constexpr bool inexactEquals(const StyleSizeLength& other) const {\n    return unit_ == other.unit_ &&\n        facebook::yoga::inexactEquals(value_, other.value_);\n  }\n\n private:\n  // We intentionally do not allow direct construction using value and unit, to\n  // avoid invalid, or redundant combinations.\n  constexpr StyleSizeLength(FloatOptional value, Unit unit)\n      : value_(value), unit_(unit) {}\n\n  FloatOptional value_{};\n  Unit unit_{Unit::Undefined};\n};\n\ninline bool inexactEquals(const StyleSizeLength& a, const StyleSizeLength& b) {\n  return a.inexactEquals(b);\n}\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/StyleValueHandle.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdint>\n\n#include <yoga/Yoga.h>\n\n#include <yoga/numeric/FloatOptional.h>\n#include <yoga/style/SmallValueBuffer.h>\n#include <yoga/style/StyleLength.h>\n\nnamespace facebook::yoga {\n\n#pragma pack(push)\n#pragma pack(1)\n\n/**\n * StyleValueHandle is a small (16-bit) handle to a length or number in a style.\n * The value may be embedded directly in the handle if simple, or the handle may\n * instead point to an index within a StyleValuePool.\n *\n * To read or write a value from a StyleValueHandle, use\n * `StyleValuePool::store()`, and `StyleValuePool::getLength()`/\n * `StyleValuePool::getNumber()`.\n */\nclass StyleValueHandle {\n public:\n  static constexpr StyleValueHandle ofAuto() {\n    StyleValueHandle handle;\n    handle.setType(Type::Auto);\n    return handle;\n  }\n\n  constexpr bool isUndefined() const {\n    return type() == Type::Undefined;\n  }\n\n  constexpr bool isDefined() const {\n    return !isUndefined();\n  }\n\n  constexpr bool isAuto() const {\n    return type() == Type::Auto;\n  }\n\n private:\n  friend class StyleValuePool;\n\n  static constexpr uint16_t kHandleTypeMask = 0b0000'0000'0000'0111;\n  static constexpr uint16_t kHandleIndexedMask = 0b0000'0000'0000'1000;\n  static constexpr uint16_t kHandleValueMask = 0b1111'1111'1111'0000;\n\n  enum class Type : uint8_t {\n    Undefined,\n    Point,\n    Percent,\n    Number,\n    Auto,\n    Keyword\n  };\n\n  // Intentionally leaving out auto as a fast path\n  enum class Keyword : uint8_t { MaxContent, FitContent, Stretch };\n\n  constexpr bool isKeyword(Keyword keyword) const {\n    return type() == Type::Keyword && value() == static_cast<uint16_t>(keyword);\n  }\n\n  constexpr Type type() const {\n    return static_cast<Type>(repr_ & kHandleTypeMask);\n  }\n\n  constexpr void setType(Type handleType) {\n    repr_ &= (~kHandleTypeMask);\n    repr_ |= static_cast<uint8_t>(handleType);\n  }\n\n  constexpr uint16_t value() const {\n    return repr_ >> 4;\n  }\n\n  constexpr void setValue(uint16_t value) {\n    repr_ &= (~kHandleValueMask);\n    repr_ |= (value << 4);\n  }\n\n  constexpr bool isValueIndexed() const {\n    return (repr_ & kHandleIndexedMask) != 0;\n  }\n\n  constexpr void setValueIsIndexed() {\n    repr_ |= kHandleIndexedMask;\n  }\n\n  uint16_t repr_{0};\n};\n\n#pragma pack(pop)\n\n} // namespace facebook::yoga\n"
  },
  {
    "path": "yoga/style/StyleValuePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cassert>\n#include <cstdint>\n\n#include <yoga/numeric/FloatOptional.h>\n#include <yoga/style/SmallValueBuffer.h>\n#include <yoga/style/StyleLength.h>\n#include <yoga/style/StyleSizeLength.h>\n#include <yoga/style/StyleValueHandle.h>\n\nnamespace facebook::yoga {\n\n/**\n * StyleValuePool allows compact storage for a sparse collection of assigned\n * lengths and numbers. Values are referred to using StyleValueHandle. In most\n * cases StyleValueHandle can embed the value directly, but if not, the value is\n * stored within a buffer provided by the pool. The pool contains a fixed number\n * of inline slots before falling back to heap allocating additional slots.\n */\nclass StyleValuePool {\n public:\n  void store(StyleValueHandle& handle, StyleLength length) {\n    if (length.isUndefined()) {\n      handle.setType(StyleValueHandle::Type::Undefined);\n    } else if (length.isAuto()) {\n      handle.setType(StyleValueHandle::Type::Auto);\n    } else {\n      auto type = length.isPoints() ? StyleValueHandle::Type::Point\n                                    : StyleValueHandle::Type::Percent;\n      storeValue(handle, length.value().unwrap(), type);\n    }\n  }\n\n  void store(StyleValueHandle& handle, StyleSizeLength sizeValue) {\n    if (sizeValue.isUndefined()) {\n      handle.setType(StyleValueHandle::Type::Undefined);\n    } else if (sizeValue.isAuto()) {\n      handle.setType(StyleValueHandle::Type::Auto);\n    } else if (sizeValue.isMaxContent()) {\n      storeKeyword(handle, StyleValueHandle::Keyword::MaxContent);\n    } else if (sizeValue.isStretch()) {\n      storeKeyword(handle, StyleValueHandle::Keyword::Stretch);\n    } else if (sizeValue.isFitContent()) {\n      storeKeyword(handle, StyleValueHandle::Keyword::FitContent);\n    } else {\n      auto type = sizeValue.isPoints() ? StyleValueHandle::Type::Point\n                                       : StyleValueHandle::Type::Percent;\n      storeValue(handle, sizeValue.value().unwrap(), type);\n    }\n  }\n\n  void store(StyleValueHandle& handle, FloatOptional number) {\n    if (number.isUndefined()) {\n      handle.setType(StyleValueHandle::Type::Undefined);\n    } else {\n      storeValue(handle, number.unwrap(), StyleValueHandle::Type::Number);\n    }\n  }\n\n  StyleLength getLength(StyleValueHandle handle) const {\n    if (handle.isUndefined()) {\n      return StyleLength::undefined();\n    } else if (handle.isAuto()) {\n      return StyleLength::ofAuto();\n    } else {\n      assert(\n          handle.type() == StyleValueHandle::Type::Point ||\n          handle.type() == StyleValueHandle::Type::Percent);\n      float value = (handle.isValueIndexed())\n          ? std::bit_cast<float>(buffer_.get32(handle.value()))\n          : unpackInlineInteger(handle.value());\n\n      return handle.type() == StyleValueHandle::Type::Point\n          ? StyleLength::points(value)\n          : StyleLength::percent(value);\n    }\n  }\n\n  StyleSizeLength getSize(StyleValueHandle handle) const {\n    if (handle.isUndefined()) {\n      return StyleSizeLength::undefined();\n    } else if (handle.isAuto()) {\n      return StyleSizeLength::ofAuto();\n    } else if (handle.isKeyword(StyleValueHandle::Keyword::MaxContent)) {\n      return StyleSizeLength::ofMaxContent();\n    } else if (handle.isKeyword(StyleValueHandle::Keyword::FitContent)) {\n      return StyleSizeLength::ofFitContent();\n    } else if (handle.isKeyword(StyleValueHandle::Keyword::Stretch)) {\n      return StyleSizeLength::ofStretch();\n    } else {\n      assert(\n          handle.type() == StyleValueHandle::Type::Point ||\n          handle.type() == StyleValueHandle::Type::Percent);\n      float value = (handle.isValueIndexed())\n          ? std::bit_cast<float>(buffer_.get32(handle.value()))\n          : unpackInlineInteger(handle.value());\n\n      return handle.type() == StyleValueHandle::Type::Point\n          ? StyleSizeLength::points(value)\n          : StyleSizeLength::percent(value);\n    }\n  }\n\n  FloatOptional getNumber(StyleValueHandle handle) const {\n    if (handle.isUndefined()) {\n      return FloatOptional{};\n    } else {\n      assert(handle.type() == StyleValueHandle::Type::Number);\n      float value = (handle.isValueIndexed())\n          ? std::bit_cast<float>(buffer_.get32(handle.value()))\n          : unpackInlineInteger(handle.value());\n      return FloatOptional{value};\n    }\n  }\n\n private:\n  void storeValue(\n      StyleValueHandle& handle,\n      float value,\n      StyleValueHandle::Type type) {\n    handle.setType(type);\n\n    if (handle.isValueIndexed()) {\n      auto newIndex =\n          buffer_.replace(handle.value(), std::bit_cast<uint32_t>(value));\n      handle.setValue(newIndex);\n    } else if (isIntegerPackable(value)) {\n      handle.setValue(packInlineInteger(value));\n    } else {\n      auto newIndex = buffer_.push(std::bit_cast<uint32_t>(value));\n      handle.setValue(newIndex);\n      handle.setValueIsIndexed();\n    }\n  }\n\n  void storeKeyword(\n      StyleValueHandle& handle,\n      StyleValueHandle::Keyword keyword) {\n    handle.setType(StyleValueHandle::Type::Keyword);\n\n    if (handle.isValueIndexed()) {\n      auto newIndex =\n          buffer_.replace(handle.value(), static_cast<uint32_t>(keyword));\n      handle.setValue(newIndex);\n    } else {\n      handle.setValue(static_cast<uint16_t>(keyword));\n    }\n  }\n\n  static constexpr bool isIntegerPackable(float f) {\n    constexpr uint16_t kMaxInlineAbsValue = (1 << 11) - 1;\n\n    auto i = static_cast<int32_t>(f);\n    return static_cast<float>(i) == f && i >= -kMaxInlineAbsValue &&\n        i <= +kMaxInlineAbsValue;\n  }\n\n  static constexpr uint16_t packInlineInteger(float value) {\n    uint16_t isNegative = value < 0 ? 1 : 0;\n    return static_cast<uint16_t>(\n        (isNegative << 11) |\n        (static_cast<int32_t>(value) * (isNegative != 0u ? -1 : 1)));\n  }\n\n  static constexpr float unpackInlineInteger(uint16_t value) {\n    constexpr uint16_t kValueSignMask = 0b0000'1000'0000'0000;\n    constexpr uint16_t kValueMagnitudeMask = 0b0000'0111'1111'1111;\n    const bool isNegative = (value & kValueSignMask) != 0;\n    return static_cast<float>(\n        (value & kValueMagnitudeMask) * (isNegative ? -1 : 1));\n  }\n\n  SmallValueBuffer<4> buffer_;\n};\n\n} // namespace facebook::yoga\n"
  }
]